guanlaiy
驱动牛犊
驱动牛犊
  • 注册日期2012-12-25
  • 最后登录2012-12-25
  • 粉丝0
  • 关注0
  • 积分3分
  • 威望21点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
阅读:2248回复:3

分页内存与非分页内存的疑惑

楼主#
更多 发布于:2012-12-25 10:33
张帆在《驱动详解》中讲到:
当程序的中断请求级在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操作,
}

请高手帮我解答一下啊,谢谢
游客

返回顶部