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
相关推荐
wzhao1011 分钟前
WSL进阶使用指南
linux
刃神太酷啦6 分钟前
堆和priority_queue
数据结构·c++·蓝桥杯c++组
Heris996 分钟前
2.22 c++练习【operator运算符重载、封装消息队列、封装信号灯集】
开发语言·c++
风静如云8 分钟前
OpenBMC:BmcWeb app.run
linux
----云烟----8 分钟前
C/C++ 中 volatile 关键字详解
c语言·开发语言·c++
数巨小码人23 分钟前
Linux下文件权限与安全
linux
yuanbenshidiaos30 分钟前
【进程 】
linux
m0_748230941 小时前
Redis 通用命令
前端·redis·bootstrap
YaHuiLiang1 小时前
一切的根本都是前端“娱乐圈化”
前端·javascript·代码规范
ChoSeitaku1 小时前
12.重复内容去重|添加日志|部署服务到Linux上(C++)
linux·c++·windows