参考:http://blog.csdn.net/broadview2006/article/details/4171397
里面的内容出自<Windows内核情景分析>
简而言之,Windows并没有将运行在Ring
0的代码全部视为内核,而是区分为Kernel和Executive,Executive可以理解为“管理层”的意思,解释为“执行体”不合理。
其中,Kernel是狭义的内核,里面的代码包括用到的数据,都是常驻在物理内存中的,不支持分页机制。
而除此之外的代码和数据,是支持分页机制的,并且可以被交换到pagefile中,即并非总是在物理内存中的。
对于驱动来说,应该属于后者,因此在驱动中的函数的头部都会使用PAGED_CODE来判断一下,
?
1 |
|
?
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
|
如果当前的中断请求级别(IRQL)太高(DPC以上),那么很可能属于Kernel部分,因此需要避免这种情况。