這個系列的文章在網上到處都是 這裏也不清楚誰纔是原文作者 我這裏做個整理,標註一下希望大家能看的更加舒服一點
目錄
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;
}