阅读:1746回复:4
对为什么要用MDL,没理解!
下面是我个人的理解
ULONG *addr; ULONG value; MDL *mdl; ULONG *virt_addr; mdl = IoAllocateMdl(addr, sizeof(value), FALSE, FALSE, NULL);//获得指针变量addr为起始地址大小为sizeof(value)的一个内存描述符表 MmProbeAndLockPages(mdl, KernelMode, IoModifyAccess);//在内存中锁定MDL描述的页 virt_addr = (ULONG *)MmGetSystemAddressForMdlSafe(mdl,NormalPagePriority); //将锁定的物理页映射到系统空间 *(ULONG *)virt_addr = value;操作MDL描述的内存块 到这里其结果应该就是把value的值存入addr所指地址(( *addr)=value),那么为什么要不直接赋值呢? 不知道理解是不是对的,请指点一下!谢谢 |
|
沙发#
发布于:2009-07-29 20:07
学习,呵呵
|
|
板凳#
发布于:2008-11-08 16:40
聚散
SG |
|
|
地板#
发布于:2008-10-21 08:42
引用两篇文章
《MDL 中实际包含的内容是什么?》 http://www.microsoft.com/china/whdc/driver/tips/mdl.mspx 《MmProbeAndLockPages 到底锁定什么?》 http://www.microsoft.com/china/whdc/driver/tips/MmProbe.mspx |
|
|
地下室#
发布于:2008-10-17 12:31
你看一下操作系统原理的书就明白了.内核更接近操作系统,内存是分页的,而且是浮动地址,如果你不锁定,正在操作时,被os搬掉,那结果是啥?
|
|
|