在内核代码中经常会看到下面这样的代码:

#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)相关推荐

  1. Visual Studio 2013开发 mini-filter driver step by step (1) - 创建 mini filter driver 工程

    Visual Studio 2013终于集成了Driver的开发和调试功能了,这是大多数开发者期盼已久的大事了,本文以mini filter driver的开发为例. 想当初,要创建一个mini fi ...

  2. Visual Studio 2013开发 mini-filter driver step by step (3) - 查看运行结果

    除了调试driver之外,诊断driver问题还有很重要的一种方式就是查看driver的log,当然也可以像应用层程序一样,输出log到文件中,但是输出log到文件中,会影响系统性能,因为log信息一 ...

  3. Visual Studio 2013开发 mini-filter driver step by step (2) - 编译,部署,运行

    编译driver 一个基本的mini filter项目创建好了以后,就可以编译,部署和运行了,在部署之前,我们要先确定在什么样的系统上运行,我有一台windows 2008 r2拟机,所以我的运行的目 ...

  4. Visual Studio 2013开发 mini-filter driver step by step 获取文件读写内容(6)

    由于后面的内容跟Visual Studio已经没有太大关系,故文章标题去掉Visual Studio前缀. 今天刚好在CSDN上读到一篇文章<程序员都要有八块腹肌>,所以要练好身体啊!其实 ...

  5. Visual Studio 2013开发 mini-filter driver step by step (4) - 获取文件名

    mini filter驱动一般用于杀毒,加密,数据实时备份等.无论是杀毒软件,加密软件还是备份软件等都是基于这样一个基本事实,就是监控文件内容以及文件内容的变化,怎样监控检测文件内容?就是监控文件的读 ...

  6. 使用Visual Studio 2013开发Python Django

    熟悉了C++或C#的童鞋可能对Visual Studio编辑器比较熟悉,最近在学python,就想使用VS当做IDE,经过几番调试,感觉还是不错的 1.安装Python Tools for Visua ...

  7. Visual Studio 2013开发 mini-filter driver step by step (11) driver 签名

    在windows vista以后的版本,driver必须签名才能正常运行,如果要想没有签名的driver也能正常运行在这些系统上面,需要在系统启动的时候按F8,选择  Disable Driver ...

  8. Visual Studio 2013开发 mini-filter driver step by step 应用层与内核通讯(8)

    应用层与内核通讯是通过通讯端口来进行的,下面的这个API就是内核用来创建一个内核端口的. NTSTATUS FltCreateCommunicationPort(_In_ PFLT_FILTER Fi ...

  9. Visual Studio 2013开发 mini-filter driver step by step (5) - 读写文件

    在kernel中读写文件要比在应用层麻烦一些,但是基本思路大体上还是一致的. 在内核中,也有很多相关的读写文件的API,本文只对 FltCreateFileEx FltReadFile FltWrit ...

最新文章

  1. 对着电脑笑了二十分钟(2)
  2. 用mysqlworkbench生成ER图
  3. [C#]统计文本文件txt中的行数(快速读取)
  4. 全栈工程师的思考 | 步步进阶经验之谈
  5. LoadRunner Interview Questions
  6. css 竖行进度图_前端学习--汇集了大量 CSS 的使用和学习的示例代码
  7. 并发事务正确性的准则 可串行化_从0到1理解数据库事务(上):并发问题与隔离级别...
  8. 机动车辆保费计算器 1.1新版发布
  9. PE教程6: Import Table(引入表)(看雪)
  10. 理解CSS3属性transition
  11. 计算机中常用的声音编辑工具有哪些,电脑常用音频剪辑软件
  12. 如何阅读Java源码?已收藏以备后用
  13. CSS文本框里的字_把网站搬进PPT里是种怎样的体验?
  14. 揭秘慕思“智商税”:狂砸40亿搞营销,发明专利仅7项
  15. 闲逸游戏态度决定胜负,安全决定未来!
  16. 努比亚计科学计算机,最后6天倒计时 努比亚为您揭晓未来科技
  17. /etc/security/limits.conf 控制文件描述符,进程数,栈大小等
  18. 显卡超频很简单 RivaTuner使用教程
  19. 【js】vue项目中实现点击复制过滤条件,获取并处理粘贴板内容
  20. 「算法与数据结构」从入门到进阶吐血整理推荐书单

热门文章

  1. bean加载时调用@value时会出现空指针异常_SpringMVC全局异常处理机制
  2. k-means 算法
  3. pandas 补充笔记:转换提取类型
  4. python 笔记:argparse
  5. pyecharts 应用4: 二维散点图
  6. 文巾解题 面试题 17.10. 主要元素
  7. R语言实战应用精讲50篇(二十七)-R语言实现随机森林(附R语言代码)
  8. 深究 ElasticSearch 查询的秘密
  9. 百度坐标转换火星坐标UDF
  10. 三级网络技术_三级网络技术考前选择题—VLAN