ychener
驱动牛犊
驱动牛犊
  • 注册日期2003-03-18
  • 最后登录2016-01-07
  • 粉丝0
  • 关注0
  • 积分1分
  • 威望20点
  • 贡献值0点
  • 好评度19点
  • 原创分0分
  • 专家分0分
阅读:4984回复:6

关于 MmGetSystemAddressForMdlSafe 没有锁住页面的问题

楼主#
更多 发布于:2007-09-20 10:21
在Passive_level的IRQ下面,MmGetSystemAddressForMdlSafe没有锁住内存。设备的Flags是DO_DIRECT_IO

以下是部分代码

case IRP_MJ_READ:
    pSysBuf = MmGetSystemAddressForMdlSafe(pIrp->MdlAddress, NormalPagePriority);

当我往pSysBuf 中Copy数据的时候,发现在pSysBuf+4096之后的数据有时候会被修改。

按照我的理解,MmGetSystemAddressForMdlSafe函数是将内存页面映射到系统的线性虚拟内存中,共驱动程序去操作,而x86系统的页面大小是4K, 而刚刚好pSysBuf+4096之后的数据有时候会被修改。 所以我怀疑是不是MmGetSystemAddressForMdlSafe并没有将这些页面锁住?


有没有朋友碰到我一样的情况?
ychener
驱动牛犊
驱动牛犊
  • 注册日期2003-03-18
  • 最后登录2016-01-07
  • 粉丝0
  • 关注0
  • 积分1分
  • 威望20点
  • 贡献值0点
  • 好评度19点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2007-09-20 11:36
是啊,我知道这个函数是一个宏的啊。
但是谁能解释我的问题呢?
ychener
驱动牛犊
驱动牛犊
  • 注册日期2003-03-18
  • 最后登录2016-01-07
  • 粉丝0
  • 关注0
  • 积分1分
  • 威望20点
  • 贡献值0点
  • 好评度19点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2007-09-21 13:42
还有人知道这个问题吗?
游客

返回顶部