languo111
驱动牛犊
驱动牛犊
  • 注册日期2006-03-25
  • 最后登录2011-08-11
  • 粉丝0
  • 关注0
  • 积分4分
  • 威望27点
  • 贡献值0点
  • 好评度5点
  • 原创分0分
  • 专家分0分
阅读:2045回复:1

各位大牛请进,请教IoAllocateMdl,MmProbeAndLockPages以及MmBuildMdlForNonPagedPool的用法

楼主#
更多 发布于:2009-07-01 14:37
各位大牛,
   最近一直在看MDL的相关资料,有一些总结,也有一些疑惑,现在写出来,请大家不吝赐教。
第一,MDL的一个用法是提供驱动程序访问用户模式数据缓冲区的一种方式:直接I/O。也就是说通过MDL告诉驱动程序如何访问用户模式的数据缓冲区,这很好理解;
第二,第二个用法是这样的,一些驱动程序在执行直接 I/O 来满足设备 I/O 控制请求时也使用 MDL,常用的方式如下:
1,分配一个buf,可能是分页或者非分页的;
2,调用IoAllocateMdl,指向这个buf;
3,对于分页内存来说,调用MmProbeAndLockPages以及MmGetSystemAddressForMdlSafe来锁定内存页,以防止被page out出去;
   对于非分页内存而言,调用MmBuildMdlForNonPagedPool映射到物理内存上。

对于第二个用法,对于分页内存可能还有意义,保证其不被page out,但对于非分页内存,我觉得除了DMA以外,别的都没有用处,既然已经是非分页内存了,直接使用就好了,为什么还要生成一个MDL去做映射?我一直都不是非常理解,有可能根本就是理解错误,请大家指教。
gutian98
禁止发言
禁止发言
  • 注册日期2003-01-12
  • 最后登录2016-12-11
  • 粉丝4
  • 关注2
  • 积分760分
  • 威望8026点
  • 贡献值1点
  • 好评度364点
  • 原创分0分
  • 专家分21分
  • 金点子奖
  • 社区居民
沙发#
发布于:2009-07-02 17:51
用户被禁言,该主题自动屏蔽!
游客

返回顶部