WDM学习方法
WDM虽然已经不是M$最新的驱动模型了,但NT内核在当今计算机操作系统中的地位还是无法动摇的。学好WDM吧。
《Programming the Microsoft Windows Driver Model》这本书是相当经典的,必须反复读。
硬件工作原理要懂,如何控制硬件。
IRP的处理需要好好研究,最好去看2000泄露的源码,或者WRK源码。里面有IRP相关的,NtWriteFile,IoCompleteRequest,IoCancelIrp等的处理流程。WRK的源码足够理解内核大部分机制了。
理解IRQL模型,理解内核如何管理中断,各IRQL时,内核会干什么
对多任务要有更深刻的认识,到底谁会抢断谁,关键抢断后对数据的影响是什么,如何避免影响。
深刻理解Windows异步模型,Windows有很多操作都是异步的,要知道一个API调用后会发生什么就必须理解异步,要想到中间可能会发生什么,最终发生错误可能是什么原因引起的
学会用WinDbg,千万别自以为是,认为自己的逻辑是相当完备的,在自己的逻辑下可以一次通过,不会发生任何错误。这个主要原因是Windows内部机制不是那么容易知道细节的,即使容易知道,你也不会一一去考证,很多你只是凭自己的理解,猜想,而已。这时候WinDbg就可以调试错误,如果你在错误的时候深入挖掘原因,那以后就不容易犯同样的错误。
千万不要用DDK的例子去开发,例子永远只是例子,一定要清楚自己的开发要干什么,如何实现。例子的很多方法是可以借鉴的,可以帮助去理解DDK文档,因为例子里有些注释还是很有用的。
理解操作系统组件,比如IO管理器,PnP管理器,对象管理器等,最主要是理解他们直接的协助关系。
动手,一定要多动手。一定要从学习中解放出来,学会用理论指导实践