Windows Driver Framework
心情轻松,这些天一直困扰我的一个虫子终于被找出来了。趁着高兴学点新东西吧。WinHEC在5月份开过了,我还没去学习文献呢。最好的方式自然是看代码。Longhorn上上面号称号称是用WDF(Windows Driver Framework)来代替WDM(Windows Driver Model)了,连DDK也改叫LDK(Longhorn Driver Kit)。今年第二期的《The NT Insider》上面这篇A New Framework秀了一个PCI DIO卡的驱动。
先不论原理,WDF里面的对象略有变化。列出一个和WDM的对照表:
WDF WDM
WDFDRIVER <--> DRIVER_OBJECT
WDFDEVICE <--> DEVICE_OBJECT
WDFREQUEST <--> IRQ
WDFQUEUE <--> user defined I/O request (IRP) queue
WDFINTERRUPT <--> struct KINTERRUPT
看起来更加的面向对象了。注意WDFQUEUE是新加的。I/O Request用专门的对象来组织我举双手赞成,因为几乎所有的驱动在WDM里都需要自己来实现队列,何不节省开发人员的时间呢(虽然我自己有一个这样的class,但是不用它就不用测试,工夫还是能省则省吧)。没拿到LDK, 没法知道他们这个队列怎么实现的,大概又是STL?
不过看代码结构并没有很大的变化,还是老一套的DriverEntry(),不过dispatch routine不在这里挂了,改到AddDevice()里面。(顺便说,WDF的MJ_CREATE也可以被cancel, 说是为了避免hang住应用程序。)LDK里面的函数都改成WDF打头的了,不过看着都还熟悉,就是多了一些操作IO Queue的宏(Microsoft还是有很多爱宏之人啊)或函数例如 WDF_IO_QUEUE_CONFIG_INIT(), WdfDeviceCreateDefaultQueue()。这个WDFQUEUE支持并发,串行和手动...不知道在什么硬件上会用到并发。
中断变化不大,多了EvtInterruptEnable()和EvtInterruptDisable()两个回调函数。
看了一下OSR论坛上的发言,很多人关心的是全面采用OO后对性能的影响,这个有点钻软件的牛角尖了,现在我用WDM+OO写的驱动都跑得很好,想想看WDF将要要求在什么样的硬件平台上跑!反正现在硬件是太便宜了,周末陪同学去买了台家用计算机,全都主流配置才花了3700。WDF有个特性是更多的分层,例如把物理层和协议层分开,有人说:太好了,我的ATAPI driver以后不用去理解SCSI的特性了。
WDF的另一个改进应该是对Power和PnP的更好的支持,看看以前为电源管理和WMI要写多少代码(我的代码写了一个很罗嗦的类),据说现在要简化了(参见WDF PnP/Power Interview with Microsoft's Jake Oshins),还没找到可看的代码,不知其详。
WDF的测试工具说是要在现在的HCT的基础上简化,让开发者在自己机器上也能测试。此外,它向前支持mini port driver和nt4 kernel driver的编译。

WinHEC 2004全部的slides可以在这里下载:http://www.microsoft.com/whdc/winhec/papers04.mspx
收工!新找到了据说是张爱玲遗作的《同学少年都不贱》,先睹为快。
posted 2004.07.01 Thursday
分类
Technology

发表评论