MDL自我记录


目录

    1.申请MDL的两种方式

    1.使用IoAllocateMdl 这个函数是直接申请内存并且格式化内存结构为MDL结构

    2.使用ExallocWithTag 申请非分页内存. 然后使用MmInitializeMdl来格式化为MDL 相当于对IoallocateMdl进行拆分

    3.MmAllocatePagesForMdl 可以直接申请一个未分页的MDL但是不是指定的方式. 第一种是指定方式.所以我们下面可以进行映射.

    2.数组初始化

    申请的内存都没有初始化. 如果是第二种方式申请并格式化为MDL的话 且是非分页内存 使用MmBuildMdlForNonpagedPool初始化

    对于可分页内存使用MmProbeAndLockPages来进行锁定,内部自动进行初始化数组的操作.

    3.映射.

    申请完了之后可以进行映射了. 调用MmMapLockedPagesSpecifyCache 进行映射即可.

    返回映射页面的起始地址. 可以进行读写了.

    其它MDL相关函数

    MmAllocateContiguousMemorySpecifyCache 直接分配非分页内存并且进行映射.