MDL自我记录
目录
1.申请MDL的两种方式
1.使用IoAllocateMdl 这个函数是直接申请内存并且格式化内存结构为MDL结构
2.使用ExallocWithTag 申请非分页内存. 然后使用MmInitializeMdl来格式化为MDL 相当于对IoallocateMdl进行拆分
3.MmAllocatePagesForMdl 可以直接申请一个未分页的MDL但是不是指定的方式. 第一种是指定方式.所以我们下面可以进行映射.
2.数组初始化
申请的内存都没有初始化. 如果是第二种方式申请并格式化为MDL的话 且是非分页内存 使用MmBuildMdlForNonpagedPool初始化
对于可分页内存使用MmProbeAndLockPages来进行锁定,内部自动进行初始化数组的操作.
3.映射.
申请完了之后可以进行映射了. 调用MmMapLockedPagesSpecifyCache 进行映射即可.
返回映射页面的起始地址. 可以进行读写了.
其它MDL相关函数
MmAllocateContiguousMemorySpecifyCache 直接分配非分页内存并且进行映射.