803页:WDK文档强调IoRegisterDriverReinitialization 主要用于同时支持Non-PNP和PNP下层的驱动。大概原因是:只依赖Legacy下层的驱动可以通过LoadOrderGroup、Dependencies等注册表项决定合适加载时机,PNP驱动则由PNP机制决定加载时机,而同时支持两种下层的驱动由PNP机制加载时,legacy下层可能尚未初始化,因此必须有一种回调机制以便等待其初始化。还是不太理解,希望看完代码能够解惑。

 

805页:为何Named Pipe 和 Mailslot会例外?因为是流文件,不能Seek?疑问暂时放着。

 

936页:注意文件对象FileObject的内部也有个Event 对象,这是供设备驱动内部来同步的。

文件对象内部的Event结构用于实现其同步语义。用户态程序在文件句柄上等待IO完成,也由此Event实现。

 

810、940页://对于加了锁的文件片段

参考WDK的文档,这里对Key的注释是错误的,这里的Key用于决定IRP在队列中的位置,类似于优先级。

 

941页:凡是支持异步操作的设备驱动都要提供一个“IO启动函数”

凡是含有“凡是”的论述都是错的,包括这一句:)

 

951页:同步返回时,不在IoCompleteRequest中安排一个内核态APC执行IopCompleteRequest应该仅仅是优化问题,无法理解 因为缺少触发条件 的表述述