MDL
1 先是mdl的数据结构。

2 下面根据用法逐步的讲解mdl数据结构的含义:
一般用法,先是 IoAllocateMdl :
原型为:

最常用的是VirtualAddress和Length。把自己的NonPageable buffer的起始地址传给IoAllocateMdl ,长度也传给他。
可是这个函数具体做了啥呢(下面只是些基本的影响理解的部分,具体更多的东西,更细节的东西,自己去看WRK的代码)?
- 根据length和VirtualAddress算出这块buffer总共跨越了几个virtual page。
- 分配MDL的内存----包括上面介绍的struct _MDL(属于head部分),ULONG型body部分。

其中PFN_NUMBER 为ULONG, IOP_FIXED_SIZE_MDL_PFNS代表pte的个数。 申请完了后,对mdl进行初始化

从这个图中可以很明显得看书上面数据结构的含义:
1 size---body + head部分的总大小。
2 StartVa----代表buffer开头处所在page的开始地址。
3 ByteOffset----代表buffer开头处相对于StartVa的偏移量。
然后使用MmBuildMdlForNonPagedPool将pte中的页表项都放入mdl中的body部分。
这里show一下关键性代码:

这样mdl结构整体的构建就结束了,开始使用mdl。使用MmMapLockedPagesSpecifyCache将MDL中存储的physical address page映射到虚拟地址中。
代码较多,不看了。但是看看函数原型应该就能明白:

这样的话,返回值就是我们重新映射的虚拟地址。就可以使用这个虚拟地址进行访问了。
以上只是最简单的基本用法,但也是最常用的。
MDL的更多相关文章
- 标准MDL方法修改Page、NonPage内存的属性
typedef struct _REPROTECT_CONTEXT { PMDL Mdl; PUCHAR LockedVa; } REPROTECT_CONTEXT, * PREPROTECT_C ...
- 深入理解MYSQL的MDL元数据锁
1 前言 2 MDL锁与实现 3 MDL锁的性能与并发改进 4 MDL锁的诊断 前言 好久没更新,主要是因为Inside君最近沉迷于一部动画片——<新葫芦娃兄弟>.终于抽得闲,完成了本篇关 ...
- MySQL · 特性分析 · MDL 实现分析
http://mysql.taobao.org/monthly/2015/11/04/ 前言 在MySQL中,DDL是不属于事务范畴的,如果事务和DDL并行执行,操作相关联的表的话,会出现各种意想不到 ...
- 初步认知MySQL metadata lock(MDL)
http://blog.itpub.net/26515977/viewspace-1208250/ 概述 随着5.5.3引入MDL,更多的Query被“Waiting for table metada ...
- MySQL锁系列3 MDL锁
http://www.cnblogs.com/xpchild/p/3790139.html MySQL为了保护数据字典元数据,使用了metadata lock,即MDL锁,保证在并发的情况下,结构 ...
- mysql 原理 ~ DDL之mdl锁
一 简介: MDL锁 二 具体 1 MDL锁 1 增删查改 申请MDL读锁 2 ddl语句 1. 拿MDL写锁 2. 降级成MDL读锁 3. 真正做DDL ...
- windows 驱动开发 MDL 内核层 用户层共享内存
参考资料 https://blog.csdn.net/wdykanq/article/details/7752909 http://blog.51cto.com/laokaddk/404584 内核层 ...
- Windows驱动中通过MDL实现用户态与核心态共享内存
Windows驱动跑在核心态(Kernel mode),驱动的调用者跑在用户态.如何使用户态进程与核心态驱动共享内存呢 ? 我们知道32位Windows中,默认状态下虚拟空间有4G,前2G是每个进程私 ...
- MDL数据结构
微软的文档里对MDL的描述感觉语焉不详,这两天在找工作的间隙逆向+黑盒测试了一下MmBuildMdlForNonPagedPool,把得到的一些理解描述下来. 一.MDL数据结构 MDL是用来建立一块 ...
随机推荐
- MFC-控件操作及数据交换
对控件进行操作函数如下: 1.ShowWindow() TURE为显示控件,FALSE为隐藏该控件: if(条件) GetDlgItem(ID)->ShowWindow(TRUE);//满足条件 ...
- Java程序设计 第16周 课堂实践
Java程序设计 第16周 课堂实践 -- 数据库2 课堂实践任务2 查询world数据库,获得人口超过500万的所有城市的列表. 代码分析 实现查询数据库需要我们修改Message.java,Mes ...
- 20155227 2016-2017-2 《Java程序设计》第一周学习总结
20155227 2016-2017-2 <Java程序设计>第一周学习总结 教材学习内容总结 浏览教材,根据自己的理解每章提出一个问题 Java三个平台的区别. JDK.JRE.JVM区 ...
- 20155305乔磊2016-2017-2《Java程序设计》第一周学习总结
学习考核方式后感 老师对于成绩的获得有很多细节的地方,获得高分很不容易,考核次数也很多,100分分为课堂考核,实验,团队项目,老师对我们的要求可以说非常的严格,我也为有一个要求严格的老师感到幸运荣幸. ...
- 20145226夏艺华 Exp6 信息搜集与漏洞扫描
20145226夏艺华 Exp6 信息搜集与漏洞扫描 基础问题回答 哪些组织负责DNS,IP的管理? · 全球根服务器均由美国政府授权的ICANN统一管理,负责全球的域名根服务器.DNS和IP地址管理 ...
- SRM 698 div1 RepeatString
250pts RepeatString 题意:问最少修改多少次将一个字符串修改为AA的形式.可以插入一个字符,删除一个字符,修改字符. 思路:枚举分界点,然后dp一下. /* * @Author: m ...
- ASP.NET SignalR 与 LayIM2.0 配合轻松实现Web聊天室(零) 前言(内容已过期,阅读请慎重)
2018-09-19 更新 :现在已经更新ASP.NET Core Middleware版本.对.NET Core SignalR感兴趣的朋友移步:https://github.com/fanpan2 ...
- 手撕一个 Galgame 神器——Shub-Niggurath Project
一.想法 Galgame 我们大概可以分为好用的 Galgame 和好玩的 Galgame,但是如果你把好玩的 Galgame 拿来用的话,有时候会十分让人着急.如果你躺在床上,一只手还在按压键盘实际 ...
- iOS 小技巧
投影效果 scanBtn.layer.shadowColor = [UIColorblackColor].CGColor;//shadowColor阴影颜色 scanBtn.layer.sha ...
- global中捕获异常
前言:由于现在日志非常重要,但是在哪里打写日志比较好呢,我选择的是在global中,把错误代码网上抛,而不是在底层写大量的try catch然后在catch中来写日志,每个catch中的写日志这样就会 ...