阅读:1745回复:4
驱动中开辟的新线程调用RtlCopyMemory出错,为什么?
我在DispatchRead中开辟一个新的线程后,DispatchRead以ERROR_IO_PENDING方式返回了,然后,我企图使用新开辟的线程将
内核空间的数据复制到用户缓冲区(采用Direct IO方式),结果在 调用RtlCopyMemory时发生了异常,蓝屏。 请问,这是什么原因造成的,我对线程的使用了解的不多,哪里 可以找到一些比较不错的资料啊? |
|
|
沙发#
发布于:2004-03-10 17:35
你自己的内核线程处于任意环境上下问中,可能不能正确访问用户地址,确保在写之前用PROBEFORWRITE检测用户地址的合法性,或者直接用MDL把用户地址空间锁定,用共享内存的方法,来传送数据。
|
|
|
板凳#
发布于:2004-03-12 18:59
楼上的大侠能不能说的具体一点啊,我以前没有搞过内核线程的说。看到你前面的建议,我有点疑惑:
我在Readfile的时候,就是采用的Direct IO方式,IO管理器不是 已经将用户缓冲区锁定了吗?为什么还要再将MDL锁定呢?IO锁定后的 用户缓冲区在我的线程中看不到吗?如何采用共享内存的方式传输数据 啊,MSDN中的哪些地方有相关介绍,我可以用来实现复制数据的操作? 我做了如下尝试,失败了。我是这么做的,在新开辟的线程里先调用MmProbeAndLockPages,结果程序到这里就死掉了,出现蓝屏,代码是 1E。 请支招。 |
|
|
地板#
发布于:2004-03-12 19:42
我又做了一个尝试,在新开辟的线程中调用ProbeForWrite宏,
结果,程序到这里就停住不动了,没有任何反应,请问,这是什么 问题造成的啊? |
|
|
地下室#
发布于:2004-03-13 10:21
注意你IRQL。
|
|
|