阅读:1294回复:0
难乎不难乎?
驱动这个东西对很多人来说太简单了,但对我来说太难了!
天分?or不勤奋? 很想评价一本看了六年的书《programing wdm》当然不是在天天看,没那个时间也没有那个精力。 先说个很逗人乐的事在说我的感想。 irp的调用最开始被我想象成和msg一样的东西,全局有个一栈。这个时期改写过winddk里面的键盘鼠标过滤驱动,误打误撞还可以运行。 然后还是在看这本书又把irp想象成了,创建的时候按device的数量分配n个irp出来每个device处理相对应的irp。也许是因为翻译的不准确的造成的误解,我英语很烂看的中文版。 今天的理解是创建一个irp,push到相应的driver栈里面。因为IoCallDriver的关系(相当一个pop动作和每个push对应),会依次pop出栈里面的irp,并用irp对应的driver function处理。 也许这个还是不对的,但让我觉得这本书和佛经一样每天都会有不同的理解。 这里感叹下学英语的必要性 one stack location for each of the drivers that will process the IRP and sometimes one more stack location for the use of the originator of the IRP. (See Figure 5-3.) 数组中的每个堆栈单元都对应一个将处理该IRP的驱动程序,另外还有一个堆栈单元供IRP的创建者使用(见图5-3)。 这两句话的翻译简直是天壤之别,但对我来说照成的困扰哪是相当的久。 我的感想是windows底层可以看作是一大堆驱动的异型联合体,抽象之后暴露的接口就是api了。 学习驱动就是学习windows系统,这个异型太庞杂了太大了,已经难以用我们习惯的树型体系来形容,虽然微软宣称这个体系是倒树型。但他确是一个图形发散体系。 是个折磨人的东西。 |
|