jonathanfoo
驱动牛犊
驱动牛犊
  • 注册日期2003-10-13
  • 最后登录2004-06-23
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
阅读:1746回复:4

驱动中开辟的新线程调用RtlCopyMemory出错,为什么?

楼主#
更多 发布于:2004-03-10 16:40
     我在DispatchRead中开辟一个新的线程后,DispatchRead以ERROR_IO_PENDING方式返回了,然后,我企图使用新开辟的线程将
内核空间的数据复制到用户缓冲区(采用Direct IO方式),结果在
调用RtlCopyMemory时发生了异常,蓝屏。

    请问,这是什么原因造成的,我对线程的使用了解的不多,哪里
可以找到一些比较不错的资料啊?
newhand
wowocock
VIP专家组
VIP专家组
  • 注册日期2002-04-08
  • 最后登录2016-01-09
  • 粉丝16
  • 关注2
  • 积分601分
  • 威望1651点
  • 贡献值1点
  • 好评度1227点
  • 原创分1分
  • 专家分0分
沙发#
发布于:2004-03-10 17:35
你自己的内核线程处于任意环境上下问中,可能不能正确访问用户地址,确保在写之前用PROBEFORWRITE检测用户地址的合法性,或者直接用MDL把用户地址空间锁定,用共享内存的方法,来传送数据。
花开了,然后又会凋零,星星是璀璨的,可那光芒也会消失。在这样 一瞬间,人降生了,笑者,哭着,战斗,伤害,喜悦,悲伤憎恶,爱。一切都只是刹那间的邂逅,而最后都要归入死亡的永眠
jonathanfoo
驱动牛犊
驱动牛犊
  • 注册日期2003-10-13
  • 最后登录2004-06-23
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2004-03-12 18:59
    楼上的大侠能不能说的具体一点啊,我以前没有搞过内核线程的说。看到你前面的建议,我有点疑惑:
    我在Readfile的时候,就是采用的Direct IO方式,IO管理器不是
已经将用户缓冲区锁定了吗?为什么还要再将MDL锁定呢?IO锁定后的
用户缓冲区在我的线程中看不到吗?如何采用共享内存的方式传输数据
啊,MSDN中的哪些地方有相关介绍,我可以用来实现复制数据的操作?

   我做了如下尝试,失败了。我是这么做的,在新开辟的线程里先调用MmProbeAndLockPages,结果程序到这里就死掉了,出现蓝屏,代码是
1E。

请支招。
newhand
jonathanfoo
驱动牛犊
驱动牛犊
  • 注册日期2003-10-13
  • 最后登录2004-06-23
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地板#
发布于:2004-03-12 19:42
    我又做了一个尝试,在新开辟的线程中调用ProbeForWrite宏,
结果,程序到这里就停住不动了,没有任何反应,请问,这是什么
问题造成的啊?

newhand
wowocock
VIP专家组
VIP专家组
  • 注册日期2002-04-08
  • 最后登录2016-01-09
  • 粉丝16
  • 关注2
  • 积分601分
  • 威望1651点
  • 贡献值1点
  • 好评度1227点
  • 原创分1分
  • 专家分0分
地下室#
发布于:2004-03-13 10:21
注意你IRQL。
花开了,然后又会凋零,星星是璀璨的,可那光芒也会消失。在这样 一瞬间,人降生了,笑者,哭着,战斗,伤害,喜悦,悲伤憎恶,爱。一切都只是刹那间的邂逅,而最后都要归入死亡的永眠
游客

返回顶部