驱动开发之六 --- 一个简单的显示驱动之三 【译文】
2012-06-23 00:19
447 查看
驱动开发之六 --- 一个简单的显示驱动之三 【译文】
DrvDisableDriver当显示驱动卸载时调用这个函数。在这个函数中,你可以执行一些必要的清理工作,清理你在DrvEnableDriver调用中创建的东西。下面的代码来自于例子。
/*********************************************************************
* GdiExample_DrvDisableDriver
*
* This function is used to notify the driver when the driver is
* getting ready to be unloaded.
*
*********************************************************************/
VOID GdiExample_DrvDisableDriver(VOID)
{
/*
* No Clean up To Do
*/
}
DrvGetModes
这个API在驱动被加载和使能后调用。他用来查询设备支持的显示模式。这些显示模式式就是在显示属性对话框的设置栏中的使用的。这些显示模式可以被缓存,所以操作系统不需要考虑它们的变化和改变。操作系统相信它是个静态的列表。尽管这个api可能被以不同方式和不同次数来调用。但在极大程度上,他不应该被认为是动态的。
通常这个api被调用两次,第一次是询问需要多大的空间来存储这些显示模式。第二次是使用正确的尺寸调用。下面的代码片段来自于驱动示例,这个驱动只支持640 * 480 * 32。
/*********************************************************************
* GdiExample_DrvGetModes
*
* This API is used to enumerate display modes.
*
* This driver only supports 640x480x32
*
*********************************************************************/
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;
}
相关文章推荐
- 驱动开发之六 --- 一个简单的显示驱动之一 [译文]
- 驱动开发之六 --- 一个简单的显示驱动之二 【译文】
- 驱动开发之六 --- 一个简单的显示驱动之四 【译文】
- 驱动开发之六 --- 一个简单的显示驱动之五 【译文】
- 驱动开发之六 --- 一个简单的显示驱动之六 【译文】
- 驱动开发之一 --- 创建一个简单的设备驱动(续) 【译文】
- 驱动开发之一 --- 创建一个简单的设备驱动(续) 【译文】
- 驱动开发之一 --- 创建一个简单的设备驱动 【译文】(精华)
- 【转帖】驱动开发之一 --- 创建一个简单的设备驱动 【译文】
- Android 驱动和系统开发. 一个简单的例子
- Windows驱动开发WDM (2)- 一个简单的WDM驱动程序
- 【转载】Ubuntu 14.04上驱动开发环境配置,及最简单一个驱动编写。
- 驱动开发之 一个简单的截取键盘按键的驱动
- Ubuntu 14.04上驱动开发环境配置,及最简单一个驱动编写。
- 驱动开发之 一个简单的截取键盘按键的驱动
- WDF驱动开发(1)- 一个简单的WDF驱动(non-pnp)
- Android 驱动跟系统开发 1. 一个简单的例子
- 嵌入式开发第61日(linux内核模块之设备驱动:怎么写一个简单的驱动)
- 嵌入式Linux驱动开发(一)一个简单的Linux内核模块框架
- Android 驱动和系统开发 1. 一个简单的例子(原创)