Visual Studio 2013开发 mini-filter driver step by step 内核代码段分页alloc_text的使用(9)
在内核代码中经常会看到下面这样的代码:
#pragma alloc_text(INIT, DriverEntry)
#pragma alloc_text(PAGE, SSMFUnload)
#pragma alloc_text(PAGE, SSMFInstanceQueryTeardown)
#pragma alloc_text(PAGE, SSMFInstanceSetup)
#pragma alloc_text(PAGE, SSMFInstanceTeardownStart)
#pragma alloc_text(PAGE, SSMFInstanceTeardownComplete)
先看一下下面的CSDN上一个帖子,看完基本就明白了。
http://bbs.csdn.net/topics/120081226
“有时,驱动程序的某些部分必须驻留内存而另一些可以被分页,这就需要一种能控制代码和数据是否分页的方法。通过指导编译器的段分配可以实现这个目的。在运行时,装入器通过检查驱动程序中的段名把段放到你指定的内存池中。此外在运行时调用内存管理器的例程也能实现这个目的。”
再看一下这个link
http://blog.csdn.net/angelxf/article/details/7963390
能得到更多信息。
“#pragma alloc_text这个宏仅仅用来指定某个函数的可执行代码在编译出来后在sys文件中的位置。内核模块编译出来之后是一个PE格式的sys文件,这个文件的代码段(text段)中有不同的节(Section),不同的节被加载到内存中之后处理情况不同。读者需要关心的主要是3种节:INIT节的特点是在初始化完毕之后就被释放。也就是说,就不再占用内存空间了。PAGE节的特点是位于可以进行分页交换的内存空间,这些空间在内存紧张时可以被交换到硬盘上以节省内存。如果未用上述的预编译指令处理,则代码默认位于PAGELK节,加载后位于不可分页交换的内存空间中。
函数DriverEntry显然只需要在初始化阶段执行一次,因此这个函数一般都用#pragma alloc_text(INIT, DriverEntry)使之位于初始化后立刻释放的空间内。
为了节约内存,可以把很多函数放在PAGE节中。但是要注意:放在PAGE节中的函数不可以在Dispatch级调用,因为这种函数的调用可能诱发缺页中断。但
是缺页中断处理不能在Dispatch级完成。为此,一般都用一个宏PAGED_CODE()进行测试。如果发现当前中断级为Dispatch级,则程序直接报异常,让程序
员及早发现。”
黑色粗体表示这个内容是从link中摘录下来的。
Visual Studio 2013开发 mini-filter driver step by step 内核代码段分页alloc_text的使用(9)相关推荐
- Visual Studio 2013开发 mini-filter driver step by step (1) - 创建 mini filter driver 工程
Visual Studio 2013终于集成了Driver的开发和调试功能了,这是大多数开发者期盼已久的大事了,本文以mini filter driver的开发为例. 想当初,要创建一个mini fi ...
- Visual Studio 2013开发 mini-filter driver step by step (3) - 查看运行结果
除了调试driver之外,诊断driver问题还有很重要的一种方式就是查看driver的log,当然也可以像应用层程序一样,输出log到文件中,但是输出log到文件中,会影响系统性能,因为log信息一 ...
- Visual Studio 2013开发 mini-filter driver step by step (2) - 编译,部署,运行
编译driver 一个基本的mini filter项目创建好了以后,就可以编译,部署和运行了,在部署之前,我们要先确定在什么样的系统上运行,我有一台windows 2008 r2拟机,所以我的运行的目 ...
- Visual Studio 2013开发 mini-filter driver step by step 获取文件读写内容(6)
由于后面的内容跟Visual Studio已经没有太大关系,故文章标题去掉Visual Studio前缀. 今天刚好在CSDN上读到一篇文章<程序员都要有八块腹肌>,所以要练好身体啊!其实 ...
- Visual Studio 2013开发 mini-filter driver step by step (4) - 获取文件名
mini filter驱动一般用于杀毒,加密,数据实时备份等.无论是杀毒软件,加密软件还是备份软件等都是基于这样一个基本事实,就是监控文件内容以及文件内容的变化,怎样监控检测文件内容?就是监控文件的读 ...
- 使用Visual Studio 2013开发Python Django
熟悉了C++或C#的童鞋可能对Visual Studio编辑器比较熟悉,最近在学python,就想使用VS当做IDE,经过几番调试,感觉还是不错的 1.安装Python Tools for Visua ...
- Visual Studio 2013开发 mini-filter driver step by step (11) driver 签名
在windows vista以后的版本,driver必须签名才能正常运行,如果要想没有签名的driver也能正常运行在这些系统上面,需要在系统启动的时候按F8,选择 Disable Driver ...
- Visual Studio 2013开发 mini-filter driver step by step 应用层与内核通讯(8)
应用层与内核通讯是通过通讯端口来进行的,下面的这个API就是内核用来创建一个内核端口的. NTSTATUS FltCreateCommunicationPort(_In_ PFLT_FILTER Fi ...
- Visual Studio 2013开发 mini-filter driver step by step (5) - 读写文件
在kernel中读写文件要比在应用层麻烦一些,但是基本思路大体上还是一致的. 在内核中,也有很多相关的读写文件的API,本文只对 FltCreateFileEx FltReadFile FltWrit ...
最新文章
- 对着电脑笑了二十分钟(2)
- 用mysqlworkbench生成ER图
- [C#]统计文本文件txt中的行数(快速读取)
- 全栈工程师的思考 | 步步进阶经验之谈
- LoadRunner Interview Questions
- css 竖行进度图_前端学习--汇集了大量 CSS 的使用和学习的示例代码
- 并发事务正确性的准则 可串行化_从0到1理解数据库事务(上):并发问题与隔离级别...
- 机动车辆保费计算器 1.1新版发布
- PE教程6: Import Table(引入表)(看雪)
- 理解CSS3属性transition
- 计算机中常用的声音编辑工具有哪些,电脑常用音频剪辑软件
- 如何阅读Java源码?已收藏以备后用
- CSS文本框里的字_把网站搬进PPT里是种怎样的体验?
- 揭秘慕思“智商税”:狂砸40亿搞营销,发明专利仅7项
- 闲逸游戏态度决定胜负,安全决定未来!
- 努比亚计科学计算机,最后6天倒计时 努比亚为您揭晓未来科技
- /etc/security/limits.conf 控制文件描述符,进程数,栈大小等
- 显卡超频很简单 RivaTuner使用教程
- 【js】vue项目中实现点击复制过滤条件,获取并处理粘贴板内容
- 「算法与数据结构」从入门到进阶吐血整理推荐书单