MDL

来源:互联网 发布:喷绘王软件 编辑:程序博客网 时间:2024/04/28 04:23

用户空间和内核的数据交换的两种方法:

  1.缓冲区。进入内核后在系统空间分配一块相应的缓冲区,并从用户空间缓冲区把内容复制到系统空间的缓冲区 DO_DIRECT_IO

  2.临时为用户空间缓冲区增添一个系统空间映射,这使同一组物理页面有了两个虚拟地址区间,其一就是原来的用户空间虚拟地址区间,其二是系统空间的虚拟地址区间。 DO_DIRECT_IO

       采用直接方法(DO_DIRECT_IO)要通过IoAllocateMdl分配一个系统空间虚拟地址区间,并将其记录在一个“内存描述列表”(Memory Descriptor List)中备用。对于MDL列表中的每一个虚存页面,MmProbeAndLockPage通过MmGetPfnForProcess()根据当前进程的页面映射获取其所映射的物理页面,并锁定该物理页面不让倒换。这样,MDL列表中的虚存页面号就全编程了物理页面号。IoAllocateMdl需与MmProbeAndLockPages结合在一起才算完整。用完之后要释放MDL列表并撤销临时映射IoFreeMdl()来实现。 

原创粉丝点击