lovehunterboy
驱动小牛
驱动小牛
  • 注册日期2008-05-29
  • 最后登录2010-04-16
  • 粉丝2
  • 关注0
  • 积分67分
  • 威望463点
  • 贡献值1点
  • 好评度0点
  • 原创分0分
  • 专家分0分
阅读:1676回复:4

对为什么要用MDL,没理解!

楼主#
更多 发布于:2008-10-17 11:54
下面是我个人的理解
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),那么为什么要不直接赋值呢?
不知道理解是不是对的,请指点一下!谢谢
znsoft
管理员
管理员
  • 注册日期2001-03-23
  • 最后登录2023-10-25
  • 粉丝300
  • 关注6
  • 积分910分
  • 威望14796点
  • 贡献值7点
  • 好评度2410点
  • 原创分5分
  • 专家分100分
  • 社区居民
  • 最爱沙发
  • 社区明星
沙发#
发布于:2008-10-17 12:31
你看一下操作系统原理的书就明白了.内核更接近操作系统,内存是分页的,而且是浮动地址,如果你不锁定,正在操作时,被os搬掉,那结果是啥?
http://www.zndev.com 免费源码交换网 ----------------------------- 软件创造价值,驱动提供力量! 淡泊以明志,宁静以致远。 ---------------------------------- 勤用搜索,多查资料,先搜再问。
dreamsity
驱动小牛
驱动小牛
  • 注册日期2006-09-01
  • 最后登录2013-07-04
  • 粉丝0
  • 关注0
  • 积分40分
  • 威望821点
  • 贡献值1点
  • 好评度68点
  • 原创分1分
  • 专家分0分
板凳#
发布于: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
一切都是时间问题!
newkey
驱动小牛
驱动小牛
  • 注册日期2002-10-03
  • 最后登录2013-10-13
  • 粉丝1
  • 关注0
  • 积分45分
  • 威望392点
  • 贡献值1点
  • 好评度90点
  • 原创分0分
  • 专家分0分
地板#
发布于:2008-11-08 16:40
聚散
SG
www.xDrv.com
xuqifeifly
驱动牛犊
驱动牛犊
  • 注册日期2008-09-07
  • 最后登录2016-01-09
  • 粉丝1
  • 关注0
  • 积分34分
  • 威望311点
  • 贡献值1点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2009-07-29 20:07
学习,呵呵
游客

返回顶部