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是用来建立一块 ...
随机推荐
- php 二位数组排序
$member_ship_level 是一个二维数组 $res = array_column($member_ship_level,'integral'); array_multisort($res, ...
- 【八】将日志写入log(glog)
[任务8]将日志写入log(glog) glog简介 glog是google开源的一个日志系统,相比较log4系列的日志系统,它更加轻巧灵活,而且功能也比较完善 glog配置使用资料 下载glog 命 ...
- Linux下C语言编译的问题
在Linux下编程发现一个诡异的现象,就是在链接一个静态库的时候总是报错,类似下面这样的错误: (.text+0x13): undefined reference to `func' 关于undefi ...
- go语言带cookie的net客户端请求与[]byte转string
前些日子参加了一个叫Advent of Code的编程大赛,每天一道题,快活似神仙.这每道题都有自己的拼图数据输入puzzle input,要做题就需要用到该数据,把数据复制过来感觉又太麻烦,于是就兴 ...
- [2016北京集训测试赛5]小Q与内存-[线段树的神秘操作]
Description Solution 哇真的异常服气..线段树都可以搞合并和拆分的啊orzorz.神的世界我不懂 Code #include<iostream> #include< ...
- [agc004D]Teleporter
Description 传送门 Solution 依题意我们可以知道,以2-n为出发点的边和1号节点会构成一课树(不然2-n号节点无法都达到首都). 为了让2-n号节点中,离1号节点的距离<k的 ...
- day 12 列表字典 补充
1.列表list的遍历 ##### while遍历 需要len(list) list = [11,22,33,44,55] len_list = len(list) i = 0 while i< ...
- P3940 分组
P3940 分组 https://www.luogu.org/problemnew/show/P3940 官方题解http://pan.baidu.com/s/1eSAMuXk 分析: 并查集. 首先 ...
- vue 与原生app的对接交互(混合开发)
小伙伴们在用vue开发h5项目特别是移动端的项目,很多都是打包后挂载在原生APP上的,那就少不了与原生交互了,我最近就是在坐这个,踩了一些坑,拿出来给大家分享下. 0.通过url传输数据:(一般是在入 ...
- [转]理解Linux文件系统之inode
很少转发别人的文章,但是这篇写的太好了. 理解inode 作者: 阮一峰 inode是一个重要概念,是理解Unix/Linux文件系统和硬盘储存的基础. 我觉得,理解inode,不仅有助于提高系统 ...