对自己设备的控制IRP的处理
2011-08-14 21:50
351 查看
UrsaeMin□ris□(10977789) 21:20:23
这个IRP是DeviceIoControl发下来的,我只返回了STATUS,但是没skip也没complete。。
楚天乐(285008395) 21:25:35
DeviceIoControl
楚天乐(285008395) 21:25:40
是发给你自己设备的不啊
楚天乐(285008395) 21:25:48
是你自己的设备 你就直接comlete
UrsaeMin□ris□(10977789) 21:34:31
上回我们留下一个未解的问题,就是当一个IRP的CancelRoutine没有被设置时,CancelIo操作会失败,系统中有可能会留下永远都不会被complete的IRP。在Threaded IRP和non-threaded IRP一节中我们有谈到irp分为线程相关和非线程相关两种。倘若一个永远不complete的irp是非线程相关的,情况会稍微好一点,顶多系统中泄露了一个资源。倘若该irp是线程相关的,那事情就大了。thread IRP由IoManager生成并保留在线程的IRP队列里,负责处理该IRP的驱动在收到下层驱动的Complete事件后不会主动收回IRP的资源而是继续complete给IoManager,由IoManager负责回收,并从线程IRP列表中删除该IRP。一个线程在退出前会遍历等待IRP队列里所有的IRP,直到它们全部被complete为止。倘若其中有一个irp永远不complete,那么线程就永远不退出,无论是ExitThread也好还是_endthreadex也好还是什么邪恶的暴力擦除数据强退也好,全都不顶用。线程不退出,进程也不能销毁(题外话:进程资源的回收动作由最后一个线程退出后发起,所谓的杀进程,其实是用apc给所有线程发起退出操作)。更糟糕的是,操作系统的关机过程都会被堵住,除了关电源,没有其他办法恢复,这一点简直比BSOD还糟糕。我们知道由user
mode发起的IO操作最后都会翻译成threaded irp,这就是为什么我在7.1大谈特谈user mode线程的原因:这个陷阱连user mode程序也会掉进去。Bad dog!
这个IRP是DeviceIoControl发下来的,我只返回了STATUS,但是没skip也没complete。。
楚天乐(285008395) 21:25:35
DeviceIoControl
楚天乐(285008395) 21:25:40
是发给你自己设备的不啊
楚天乐(285008395) 21:25:48
是你自己的设备 你就直接comlete
UrsaeMin□ris□(10977789) 21:34:31
上回我们留下一个未解的问题,就是当一个IRP的CancelRoutine没有被设置时,CancelIo操作会失败,系统中有可能会留下永远都不会被complete的IRP。在Threaded IRP和non-threaded IRP一节中我们有谈到irp分为线程相关和非线程相关两种。倘若一个永远不complete的irp是非线程相关的,情况会稍微好一点,顶多系统中泄露了一个资源。倘若该irp是线程相关的,那事情就大了。thread IRP由IoManager生成并保留在线程的IRP队列里,负责处理该IRP的驱动在收到下层驱动的Complete事件后不会主动收回IRP的资源而是继续complete给IoManager,由IoManager负责回收,并从线程IRP列表中删除该IRP。一个线程在退出前会遍历等待IRP队列里所有的IRP,直到它们全部被complete为止。倘若其中有一个irp永远不complete,那么线程就永远不退出,无论是ExitThread也好还是_endthreadex也好还是什么邪恶的暴力擦除数据强退也好,全都不顶用。线程不退出,进程也不能销毁(题外话:进程资源的回收动作由最后一个线程退出后发起,所谓的杀进程,其实是用apc给所有线程发起退出操作)。更糟糕的是,操作系统的关机过程都会被堵住,除了关电源,没有其他办法恢复,这一点简直比BSOD还糟糕。我们知道由user
mode发起的IO操作最后都会翻译成threaded irp,这就是为什么我在7.1大谈特谈user mode线程的原因:这个陷阱连user mode程序也会掉进去。Bad dog!
相关文章推荐
- C#图片处理之: 另存为压缩质量可自己控制的JPEG
- 构建自己的IRP来处理I/O
- 一个51单片机比较综合的程序(包括了串口通信,io控制,字符串处理,中断处理),仅供自己以后参考
- C#图片处理之: 另存为压缩质量可自己控制的JPEG
- 木其工作室(专业程序代写服务)[转]学写块设备驱动(三)----踢开IO调度器,自己处理bio(上)
- 学写块设备驱动(三)----踢开IO调度器,自己处理bio(上)
- 学写块设备驱动(三)----踢开IO调度器,自己处理bio(上)
- 木其工作室(专业程序代写服务)[转]学写块设备驱动(三)----踢开IO调度器,自己处理bio(下)
- C#图片处理之: 另存为压缩质量可自己控制的JPEG .
- C#图片处理之:另存为压缩质量可自己控制的JPEG
- 学写块设备驱动(三)----踢开IO调度器,自己处理bio(下)
- 超低成本DIY skill实现Amazon Echo Dot控制自己家的智能设备
- C#图片处理之: 另存为压缩质量可自己控制的JPEG
- 浅析libusb控制接口和mountd守护进程处理uevent切换usb设备的实现
- C#图片处理之: 另存为压缩质量可自己控制的JPEG
- 设备控制(反馈处理)
- C#图片处理之另存为压缩质量可自己控制的JPEG
- 学写块设备驱动(三)----踢开IO调度器,自己处理bio(下)
- C#图片处理之: 另存为压缩质量可自己控制的JPEG
- C#图片处理之: 另存为压缩质量可自己控制的JPEG