Re: isr或dpc中执行IoCompleteRequest的问题!
Windows内核调试
isr或dpc中执行IoCompleteRequest的问题!
zyq8709
2011-06-05, 15:03 下午
如果使用NtReadFile读取采用缓冲模式的设备时,最终在isr或Dpc例程中完成了该Irp,即调用IoCompleteRequest。那么在IoCompleteRequest内部将会把系统空间数据复制到用户地址空间。这里就有一个问题,由于isr或Dpc例程属于任意上下文,那么当他们执行时,用户地址空间的映射已有可能改变,那么他们进行复制时能否将数据复制到正确的用户空间缓冲区?
这种情况在鼠标键盘驱动中经常出现,他们是如何保证地址正确的呢?
Re: isr或dpc中执行IoCompleteRequest的问题!
格蠹老雷
2011-06-05, 20:15 下午
通用的机制是APC,可以参阅Walter Oney的WDM编程一书
鼠标键盘信息由Windows子系统(Win32K+CSRSS)处理,可以通过逆向调用传递到用户态
Re: isr或dpc中执行IoCompleteRequest的问题!
zyq8709
2011-06-14, 16:08 下午
多谢张老师的指点,我又看了一下代码就彻底明白了!