码迷,mamicode.com
首页 > 其他好文 > 详细

驱动中PAGED_CODE的作用

时间:2014-06-12 16:56:36      阅读:2840      评论:0      收藏:0      [点我收藏+]

标签:class   blog   code   http   com   get   

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

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

 

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

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

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

 

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

1
#define PAGED_CODE() PAGED_ASSERT(KeGetCurrentIrql() <= APC_LEVEL);
1
2
3
4
5
6
7
8
9
10
11
12
13
14
#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部分,因此需要避免这种情况。

驱动中PAGED_CODE的作用,布布扣,bubuko.com

驱动中PAGED_CODE的作用

标签:class   blog   code   http   com   get   

原文地址:http://www.cnblogs.com/long123king/p/3781902.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!