阅读:1228回复:1
关于楚狂人那本教程的几个问题
最近细读楚狂人的那本<windows文件过滤系统开发教程>,遇到1个问题不能很好的理解,希望各位大牛能帮忙解释一下 :)
第9节里有这么一段话:"UseBuffer 是一个只在当前线程上下文才有效的地址.如果你打算按这个地址获得数据,除非你打算自己分配MDL 锁定内存地址,否则你必须在当前线程上下文中.完成函数与SfRead 并非同一个线程.所以在完成函数中按这个地址去获取数据是不对的.如何回到当前线程?我采用简单的办法.在SfRead 中设置一个事件,调用IoCallDriver 之后开始等待这个事件.而在完成函数中设置这个事件.这样等待结束的时候,刚好Irp 已经完成,我也回到了我的SfRead 原来的线程." 这段话的意思是一个IRP的派遣例程和完成例程不是同一个线程吗?如果是这样,irp在我这一层的事情还没做完,怎么能被系统传到下一层去呢? 另外,在第10节读完成的请求里,写的不是很细,没有涉及到关于等待时间的程序的写法,希望各位大牛指点一二 |
|
沙发#
发布于:2007-07-04 14:32
没有人帮忙吗?我说清楚一点,就是一个irp,比如irp_mn_read,在派遣例程里和我为其写的完成例程的线程是不一样的.我不太理解,一个IRP不被这一层处理完怎么能继续往下传?希望能有人能帮我讲一讲IRP的这一段流程
|
|