今天是周六,几个月周六就没休息过,连做了2个项目,第一个项目3个人,第二个项目就我一个人,是在是无聊啊。充其量大学生毕设难度的web程序,搞得那么复杂。OK不说了,既然这样就更要好好学习内核编程方面的知识,过2月换个地搞一搞。
这周看了一下一些WDM驱动的基础例程,I/O管理器是如何管理例程等等。在学习的过程中,给我一种感觉,就是编写windows这些驱动和ring3层下,用win32编写的上层应用程序有很多类似点。就比如他们最重要的,实际干事的那部分,驱动层叫做派遣,分发或者是dispatch函数,应用层也是用switch...case...来实现处理不同操作。他们同样是回调函数这种方式调用,而且看高手的博客,从只言片语中也能发现,都是微软一套路的东西,应该相似程度是很大的。所以在今后学习中,要联系起来,互相比较着学习,效率可能会高一点吧。
下面具体总结一下,然后来个小例子跑一跑,深刻理解一下。
DriverEntry例程
1.找到DriverEntry例程所控制的硬件
2.初始化。通过入口参数(指针)
3.IoCreateController穿件一个控制对象
4.IoCreateDevice为它控制的物理或者逻辑设备穿件一个设备对象,并且初始化Extension设备
5.使用IoCreateSymbolicLink函数,为win32应用层“暴露”一个关联名字。
6.联系“设备”和终端对象
7.重复4-6步
8.DriverEntry返回Success_Status
如果是WDM的驱动程序,则1,3-6步放在AddDevice中去。即插即用。
分享一个blog:http://www.zeroplace.cn/article.asp?id=394