MDL结构
日期: 2016-03-12 分类: 个人收藏 314次阅读
//
// I/O system definitions.
//
// 定义一个内存描述符列表(MDL)
//
// 一个MDL通过一系列物理页面描述在虚拟缓冲中的页面。
// 通过一个PFN_NUMBER队列描述与缓冲区相关的页面,这个PFN_NUMBER队列的内存位置紧跟着MDL头结构之后。
//
// 一个简单的计算队列的地址的方法是在这个MDL的地址上加一:
//
// Pages = (PPFN_NUMBER) (Mdl + 1);
//
// 注意在一个线程的上下文中,MDL映射的虚拟地址的首地址可以使用一下方式引用:
//
// Mdl->StartVa | Mdl->ByteOffset
//
typedef struct _MDL {
struct _MDL *Next; //用于挂入到一个队列中,如插入到驱动程序的IRP的MDL队列中。
CSHORT Size; //指定这个MDL所占的空间大小 = MDL结构体的大小 + sizeof(PFN_NUMBER)*映射需要的页面数。
CSHORT MdlFlags; //指明MDL的映射方式
struct _EPROCESS *Process; //指明此MDL属于哪个进程。
PVOID MappedSystemVa; //所描述的内存如果有映射到系统空间并锁定。那么这个成员指定了MDL在系统空间内的地址
PVOID StartVa; //所描述的内存映射后的虚拟地址的开始页面地址,这个地址总是页面对齐的地址
ULONG ByteCount; //此MDL所描述的内存块有多少个字节
ULONG ByteOffset; //MDL映射的虚拟地址的首地址在StartVa页面中的偏移值。
} MDL, *PMDL;
除特别声明,本站所有文章均为原创,如需转载请以超级链接形式注明出处:SmartCat's Blog
标签:WRK1_2笔记 wrk
精华推荐