驅動開發之六 --- 一個簡單的顯示驅動之三 【譯文】

原文鏈接:http://blog.sina.com.cn/s/blog_6ef955fa0100m4f2.html

這個系列的文章在網上到處都是 這裏也不清楚誰纔是原文作者 我這裏做個整理,標註一下希望大家能看的更加舒服一點

目錄

(一)驅動開發一個簡單的顯示驅動

(二)驅動開發一個簡單的顯示驅動

(三)驅動開發一個簡單的顯示驅動

(四)驅動開發一個簡單的顯示驅動

(五)驅動開發一個簡單的顯示驅動

(六)驅動開發一個簡單的顯示驅動

 

DrvDisableDriver

當顯示驅動卸載時調用這個函數。在這個函數中,你可以執行一些必要的清理工作,清理你在DrvEnableDriver調用中創建的東西。下面的代碼來自於例子。


VOID GdiExample_DrvDisableDriver(VOID)

{

   

}

DrvGetModes

這個API在驅動被加載和使能後調用。他用來查詢設備支持的顯示模式。這些顯示模式式就是在顯示屬性對話框的設置欄中的使用的。這些顯示模式可以被緩存,所以操作系統不需要考慮它們的變化和改變。操作系統相信它是個靜態的列表。儘管這個api可能被以不同方式和不同次數來調用。但在極大程度上,他不應該被認爲是動態的。

通常這個api被調用兩次,第一次是詢問需要多大的空間來存儲這些顯示模式。第二次是使用正確的尺寸調用。下面的代碼片段來自於驅動示例,這個驅動只支持640 * 480 * 32。

ULONG GdiExample_DrvGetModes(HANDLE hDriver,

                               ULONG cjSize, DEVMODEW *pdm)

{

   ULONG ulBytesWritten = 0, ulBytesNeeded = sizeof(DEVMODEW);

   ULONG ulReturnValue;

   ENGDEBUGPRINT(0, "GdiExample_DrvGetModes\r\n", NULL);

   if(pdm == NULL)

   {

       ulReturnValue = ulBytesNeeded;

   }

   else

   {

      

       ulBytesWritten = sizeof(DEVMODEW);

       memset(pdm, 0, sizeof(DEVMODEW));

       memcpy(pdm->dmDeviceName, DLL_NAME, sizeof(DLL_NAME));

       pdm->dmSpecVersion   = DM_SPECVERSION;

       pdm->dmDriverVersion = DM_SPECVERSION;

       pdm->dmDriverExtra      = 0;

       pdm->dmSize             = sizeof(DEVMODEW);

       pdm->dmBitsPerPel       = 32;

       pdm->dmPelsWidth        = 640;

       pdm->dmPelsHeight       = 480;

       pdm->dmDisplayFrequency = 75;

       pdm->dmDisplayFlags     = 0;

      

       pdm->dmPanningWidth     = pdm->dmPelsWidth;

       pdm->dmPanningHeight    = pdm->dmPelsHeight;

       pdm->dmFields           = DM_BITSPERPEL | DM_PELSWIDTH |

                                 DM_PELSHEIGHT | DM_DISPLAYFLAGS |

                                 DM_DISPLAYFREQUENCY;

       ulReturnValue = ulBytesWritten;

   }

   return ulReturnValue;

}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章