参考:http://blog.csdn.net/broadview2006/article/details/4171397

里面的内容出自<Windows内核情景分析>

简而言之,Windows并没有将运行在Ring 0的代码全部视为内核,而是区分为Kernel和Executive,Executive可以理解为“管理层”的意思,解释为“执行体”不合理。

其中,Kernel是狭义的内核,里面的代码包括用到的数据,都是常驻在物理内存中的,不支持分页机制。

而除此之外的代码和数据,是支持分页机制的,并且可以被交换到pagefile中,即并非总是在物理内存中的。

对于驱动来说,应该属于后者,因此在驱动中的函数的头部都会使用PAGED_CODE来判断一下,

#define PAGED_CODE() PAGED_ASSERT(KeGetCurrentIrql() <= APC_LEVEL);
#define PASSIVE_LEVEL 0             // Passive release level
#define LOW_LEVEL 0 // Lowest interrupt level
#define APC_LEVEL 1 // APC interrupt level
#define DISPATCH_LEVEL 2 // Dispatcher level
#define CMCI_LEVEL 5 // CMCI handler level #define PROFILE_LEVEL 27 // timer used for profiling.
#define CLOCK1_LEVEL 28 // Interval clock 1 level - Not used on x86
#define CLOCK2_LEVEL 28 // Interval clock 2 level
#define IPI_LEVEL 29 // Interprocessor interrupt level
#define POWER_LEVEL 30 // Power failure level
#define HIGH_LEVEL 31 // Highest interrupt level #define CLOCK_LEVEL (CLOCK2_LEVEL)

如果当前的中断请求级别(IRQL)太高(DPC以上),那么很可能属于Kernel部分,因此需要避免这种情况。

最新文章

  1. C# 对象锁——Monitor
  2. Spring Scope:Web项目中如何安全使用有状态的Bean对象?
  3. ASP.NET MVC 5 with EF 6 上传文件
  4. 论SOA架构的几种主要开发方式
  5. WPF自定义空心文字
  6. 数据库连接JDBC和数据库连接池C3P0自定义的java封装类
  7. javascript 数据类型 变量 类型转换运算符
  8. phpcms 的实用相关接口,函数,调用方法
  9. android异步加载图片
  10. C#中实现对Excel特定文本的搜索
  11. hdu 2689 Sort it
  12. UDP&mdash;Socket,套接字聊天简单的聊天程序。
  13. poj 2001 Shortest Prefixes(特里)
  14. RabbitMQ学习3----运行和管理RabbitMQ
  15. Centos7搭建swarm集群
  16. &quot;System.OutOfMemoryException&quot; exception when you execute a query in SQL Server Management Studio (转自MSDN)
  17. Android文件的读写
  18. Generator生成器函数
  19. Python2处理字符集问题
  20. codeforces785E

热门文章

  1. 如何使用iText制作中文PDF
  2. Lock的使用
  3. &lt;每日一题&gt;题目4:for循环套生成器的面试题
  4. alpha阶段绩效考核
  5. 蛋疼的 403 Forbidden You don’t have permission to access / on this server.
  6. showmount - 显示关于 NFS 服务器文件系统挂载的信息
  7. 四、IDS4建立Authorization server和Client
  8. linux-ftp install
  9. mybatis generator 使用方法
  10. delphi三层DCOM架构