iniwf

风是温柔的,雨是伤心的,云是快乐的,月是多情的,爱是迷失的,恋是醉人的,情是难忘的,天是长久的,地是永恒的

驱动开发之六 --- 一个简单的显示驱动之三 【译文】

转自http://hi.baidu.com/combojiang/blog/item/7149954a8084e82609f7eff6.html

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, 
0sizeof(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;

}

posted on 2009-03-23 22:14 iniwf 阅读(250) 评论(0)  编辑 收藏 引用 所属分类: 驱动


只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理


导航

统计

常用链接

留言簿(2)

随笔分类

随笔档案

收藏夹

IT技术

积分与排名

最新评论

阅读排行榜

评论排行榜