阅读:2045回复:1
各位大牛请进,请教IoAllocateMdl,MmProbeAndLockPages以及MmBuildMdlForNonPagedPool的用法
各位大牛,
最近一直在看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去做映射?我一直都不是非常理解,有可能根本就是理解错误,请大家指教。 |
|
沙发#
发布于:2009-07-02 17:51
用户被禁言,该主题自动屏蔽! |
|