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
相关推荐
_院长大人_11 小时前
Vue + ECharts 实现价格趋势分析图
前端·vue.js·echarts
minji...11 小时前
Linux 线程同步与互斥(二) 线程同步,条件变量,pthread_cond_init/wait/signal/broadcast
linux·运维·开发语言·jvm·数据结构·c++
梓䈑11 小时前
高性能 C++ 日志实战:spdlog 核心架构解析与最佳实践指南
c++·架构
虚伪的空想家11 小时前
k8s集群configmap和secrets备份脚本
linux·容器·kubernetes
IT_陈寒11 小时前
Vite的alias配置把我整不会了,原来是这个坑
前端·人工智能·后端
the sun3411 小时前
从 QEMU 直接启动到 U-Boot 引导:嵌入式 Linux 启动流程的本质差异
linux·运维·服务器
万物得其道者成12 小时前
Cursor 提效实战:我的前端 Prompt、审查 SKILL、MCP 接入完整方法
前端·prompt
草莓熊Lotso12 小时前
【Linux 线程进阶】进程 vs 线程资源划分 + 线程控制全详解
java·linux·运维·服务器·数据库·c++·mysql
唐樽12 小时前
C++ 竞赛学习路线笔记
c++·笔记·学习
ShineWinsu12 小时前
对于Linux:文件操作以及文件IO的解析
linux·c++·面试·笔试·io·shell·文件操作