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
相关推荐
脾气有点小暴2 分钟前
uniapp自定义头部导航
前端·uni-app
假装我不帅10 分钟前
jquery.nicescroll使用
前端·javascript·jquery
安_18 分钟前
js 数组splice跟slice
开发语言·前端·javascript
一只旭宝24 分钟前
Linux专题六:进程替换详解加五种进程间通讯方式(套接字放到tcp通信编程上讲述)
linux
开压路机26 分钟前
Linux的基本指令
linux·服务器
用泥种荷花28 分钟前
【LangChain学习笔记】链式调用
前端
lifewange39 分钟前
linux管理服务的命令有哪些
linux·运维·服务器
yinuo1 小时前
IndexedDB 使用指南
前端
大聪明-PLUS1 小时前
我们如何分析原生应用程序(C++、Windows、Linux)的内存消耗?
linux·嵌入式·arm·smarc
小徐_23331 小时前
2025,AI 编程元年,我用 TRAE 做了这些!
前端·程序员·trae