MDL

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

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

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

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值