MDL的使用(一) IoAllocateMdl / MmInitializeMdl

本文介绍了MDL(Memory Descriptor List)在Windows驱动开发中的作用,讲解了如何使用IoAllocateMdl创建MDL以及MmInitializeMdl进行初始化。MDL用于描述虚拟内存到物理内存的映射,提供访问虚拟内存地址、大小、物理页等信息的宏。同时,文章提到了MDL的释放方法以及与ExAllocatePool的配合使用。
摘要由CSDN通过智能技术生成

MDL (memory descriptor list)通常用于描述Va对应的物理内存的位置。通常Driver中可以访问的内容包括Next、MdlFlags。

WDK中定义了几个常用的宏来访问MDL中的一些变量,包括:


MmGetMdlVirtualAddress returns the virtual memory address of the buffer. // 虚拟内存地址

MmGetMdlByteCount returns the size, in bytes, of the buffer. // 虚拟内存长度

MmGetMdlByteOffset returns the offset within a physical page of the beginning of the buffer. // 物理内存中首地址相对于page起始地址的偏移量

MmGetMdlPfnArray returns a pointer to an array of physical page numbers. The size of this array can be computed from the buffer starting address and length by using ADDRESS_AND_SIZE_TO_SPAN_PAGES. // 物理内存page list


通常我们通过 IoAllocateMdl 来创建一个 MDL,通过 IoFreeMdl 来释放它。

另外,还可以通过ExAllocatePool创建的memory,利用MmInitializeMdl来将它格式化成一个MDL。此时的Memory必须是NonPageable的。当然释放还是需要透过ExFreePool来进行的。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值