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
相关推荐
tqs_1234513 小时前
倒排索引数据结构
java·前端·算法
a程序小傲13 小时前
听说前端又死了?
开发语言·前端·mysql·算法·postgresql·深度优先
bkspiderx13 小时前
RabbitMQ 技术指南(C/C++版)
c语言·c++·rabbitmq
脑子进水养啥鱼?13 小时前
Linux find 命令
linux·运维
hetao173383713 小时前
2026-01-19~20 hetao1733837 的刷题笔记
c++·笔记·算法
梓䈑13 小时前
【Linux系统】实现线程池项目(含日志类的设计)
linux·服务器·c++
Yan.love13 小时前
【CSS-布局】终极方案:Flexbox 与 Grid 的“降维打击”
前端·css
优雅的潮叭14 小时前
c++ 学习笔记之 volatile与atomic
c++·笔记·学习
EverydayJoy^v^14 小时前
RH124简单知识点——第8章——配置和保护SSH
linux·运维·ssh
取加若则_14 小时前
Linux环境变量与命令行参数全解析
linux