阅读:2248回复:3
分页内存与非分页内存的疑惑
张帆在《驱动详解》中讲到:
当程序的中断请求级在DISPATCH_LEVEL之上时(包括DISPATCH_LEVEL层),程序只能使用非分页内存,否则将导致蓝屏死机。 我的疑问是: 疑问1.代码本身是只能被加载到非分页内存? 假设例程void somefun()总是运行在DISPATCH_LEVEL时,那么是否在例程前只能用#pragma LOCKEDCODE,如: #pragma LOCKEDCODE void somefun() { ... } 但在实际调试时,我用下面方式定义,并没有蓝屏死机,请问为什么? #pragma PAGEDCODE void somefun() { ... } 疑问2.代码内部分配内存时是否只能分配非分页内存? 假设例程void somefun()总是运行在DISPATCH_LEVEL时,在例程内部分配分页内存,编写如下,在实际调试中怎么不蓝屏死机? #pragma LOCKEDCODE void somefun() { PVOID pTmp = ExAllocatePool(PagePool, 1024); ... //对pTmp操作, } 请高手帮我解答一下啊,谢谢 |
|