驱动开发详解笔记的存档

Windows CrashDump

2015-01-01 22:44:58

在自动化测试过程中,如果碰到应用程序崩溃,往往会弹出一个”error reporting”的对话框,如果不人工关闭这个对话框的话会导致程序无法继续进行下去。所以需要禁止弹出这个对话框并启用Windows CrashDump来收集错误日志。采用如下方法进行:

阅读全文…

完成例程返回Status_Processing_Required

2011-11-15 04:14:13

上一篇谈到了这个完成例程, 我们在完成例程中返回的是Status_Success, 这样Irp会继续向上回卷, 此时的完成例程仅仅是一个通知, 表明Irp已经完成. 但是如果此时我们不返回Status_success而是返回Status_Processing_Required则会停止回卷, 这时候的本层的Irp处理例程又重新获得Irp的控制. 并且该Irp又变成的未完成状态. 需要再次的调用IoCompleteRequest完成Irp.
 

阅读全文…

完成例程

2011-11-14 09:16:19

在将Irp发送给底层驱动程序, 或者其他驱动之前, 我们可以对Irp设置一个完成例程, 这样一旦在底层驱动程序将Irp完成以后, Irp完成例程将被触发, 通过设置完成例程可以方便的使程序员了解其他驱动对Irp进行的处理.

阅读全文…

遍历设备栈

2011-11-14 05:20:58

这一篇基本上就没有什么新东西了, 就是上几篇的应用. 遍历一个驱动的所有设备对象, 还有绑定在设备上面的所有的驱动对象, 设备对象.

阅读全文…

分层驱动程序

2011-11-13 08:33:15

分层驱动程序也不难嘛, 就是逻辑上有点乱了. 不过逻辑上分开以后写代码就清晰多了. 在结构上可以得到很多好处,恩, 这个分层驱动也不只是WDM式驱动才支持, NT式驱动也是可以的, 优点很多.

阅读全文…

驱动程序调用驱动程序2

2011-11-13 03:09:02

上一篇说到内核里面用户态这边差不多的函数, 比如ZwCreateFile, ZwReadFile什么之类的, 内核里面其实还有些更加暴力的东西存在的, 比如说用户态这边打开设备只有一个句柄, 但是内核里面是可以直接触摸到指针的, 用户态那边只可以调用几个固定的函数来发送Irp. 那么内核里面可以自定义Irp的发送, 非常的暴力, 好用!
 

阅读全文…

驱动程序调用驱动程序1

2011-11-12 06:31:33

 除了在Win32下面可以调用ReadFile, WriteFile之类的函数打开设备对象, 在内核中也是可以的, 而且方法比用户态这边更多. 首先这种方法就是Win32上面相同的方式了, 直接打开设备. 内核也有一套函数类似Win32下面的CreateFile, WriteFile, ReadFile.

阅读全文…

Irp超时处理

2011-11-11 08:51:31

很多时候Irp被送到底层驱动程序后, 由于硬件设备的问题, Irp不能够得到及时的处理, 甚至有可能永远都不会被处理.这时候需要对Irp超时情况作出处理, 一旦在规定时间内Irp没有被处理, 操作系统就会进入到Irp的超时处理函数中.

阅读全文…

内核定时器

2011-11-11 06:29:02

在Win32上面基本上定时做事情事情的话, 一般会使用WM_TIMER消息, 当然其他还有很多种选择, 同样的, 在内核中一样很多种的定时器对象可供使用, 使用起来也是那么的简单.

阅读全文…

自定义StartIo

2011-11-10 11:19:12

这个系统给的StartIo虽然好用, 但是很多时候我们还是需要使用自定义的StartIo例程的. 因为系统提供的只能使用一个队列.如果是我们自己建立的话, 可以建立多个队列. 灵活性高, 但是稍微复杂些. 其实要说复杂也不尽然, 用那个系统的时候感觉不是很好,因为封装的时候不给力, 还需要在我们自己的函数中帮系统做一些事情.我倒. 还是这个好, 想建立几个队列就几个队列. 而且代码也不是那么的复杂. 也就是几个函数的调用了!  

 

阅读全文…