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

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

这个系列的文章在网上到处都是 这里也不清楚谁才是原文作者 我这里做个整理,标注一下希望大家能看的更加舒服一点

目录

(一)驱动开发一个简单的显示驱动

(二)驱动开发一个简单的显示驱动

(三)驱动开发一个简单的显示驱动

(四)驱动开发一个简单的显示驱动

(五)驱动开发一个简单的显示驱动

(六)驱动开发一个简单的显示驱动

DrvDisableDriver

当显示驱动卸载时调用这个函数。在这个函数中,你可以执行一些必要的清理工作,清理你在DrvEnableDriver调用中创建的东西。下面的代码来自于例子。


VOID GdiExample_DrvDisableDriver(VOID)

{

   

}

DrvGetModes

扫描二维码关注公众号,回复: 7640466 查看本文章

这个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;

}

猜你喜欢

转载自blog.csdn.net/zb774095236/article/details/101015824