2.4.ReactOS系统运行级别IRQL的切换

2.4.ReactOS系统运行级别IRQL的切换

2.4.ReactOS系统运行级别IRQL的切换

文章目录


HalpLowerIrql函数

cpp 复制代码
VOID
HalpLowerIrql(KIRQL NewIrql)
{
  if (NewIrql >= PROFILE_LEVEL)
    {
      KeGetPcr()->Irql = NewIrql;
      return;
    }
  HalpExecuteIrqs(NewIrql);
  if (NewIrql >= DISPATCH_LEVEL)
    {
      KeGetPcr()->Irql = NewIrql;
      return;
    }
  KeGetPcr()->Irql = DISPATCH_LEVEL;
  if (((PKIPCR)KeGetPcr())->HalReserved[HAL_DPC_REQUEST])
    {
      ((PKIPCR)KeGetPcr())->HalReserved[HAL_DPC_REQUEST] = FALSE;
      KiDispatchInterrupt();
    }
  KeGetPcr()->Irql = APC_LEVEL;
  if (NewIrql == APC_LEVEL)
    {
      return;
    }
  if (KeGetCurrentThread() != NULL && 
      KeGetCurrentThread()->ApcState.KernelApcPending)
    {
      KiDeliverApc(KernelMode, NULL, NULL);
    }
  KeGetPcr()->Irql = PASSIVE_LEVEL;
}

cpu的级别

cpp 复制代码
//
// IRQL Levels
//
#define PASSIVE_LEVEL                           0x0
#define APC_LEVEL                               0x1
#define DISPATCH_LEVEL                          0x2
#define CLOCK2_LEVEL                            0x1C
#define HIGH_LEVEL                              0x1F
相关推荐
这儿有一堆花9 分钟前
C语言递归宏详解
c语言·开发语言·c++
吃饺子不吃馅31 分钟前
⚡️ Zustand 撤销重做利器:Zundo 实现原理深度解析
前端·javascript·github
ue星空35 分钟前
全局描述符表GDT (Global Descriptor Table)
c++
幼儿园技术家36 分钟前
网站在苹果 Safari 进行适配遇到的问题
前端
jzhwolp41 分钟前
nginx epoll 里黑科技位运算+指针复用
linux·nginx·架构
IT_陈寒41 分钟前
7个鲜为人知的JavaScript性能优化技巧,让你的网页加载速度提升50%
前端·人工智能·后端
oioihoii1 小时前
C++中的多态:动态多态与静态多态详解
java·开发语言·c++
NON-JUDGMENTAL1 小时前
在 Ubuntu 上安装 Ollama 并通过 Open WebUI 运行本地大语言模型
linux·ubuntu·语言模型
不坑老师1 小时前
不坑盒子的插入网页功能是完全免费的!
前端·html
Wang's Blog1 小时前
前端FAQ: 描述⼀下你最近使⽤过的前端框架,并解释为何选择它们?
前端·vue.js·faq