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
相关推荐
睡不醒的kun11 小时前
leetcode算法刷题的第三十二天
数据结构·c++·算法·leetcode·职场和发展·贪心算法·动态规划
Empty_77712 小时前
SELinux安全上下文
linux·服务器·安全
bug攻城狮13 小时前
解决Ubuntu中apt-get -y安装时弹出交互提示的问题
linux·运维·ubuntu
雾恋13 小时前
最近一年的感悟
前端·javascript·程序员
xiachong2713 小时前
ubuntu18.04安装PCL1.14
linux·ubuntu
夜阑珊夭夭13 小时前
linux自定义网卡名字
linux·运维
乔宕一13 小时前
stm32 链接脚本没有 .gcc_except_table 段也能支持 C++ 异常
c++·stm32·嵌入式硬件
SuperCandyXu13 小时前
P3205 [HNOI2010] 合唱队-普及+/提高
c++·算法·洛谷
czhc114007566313 小时前
Linux912 shell:$# $1 $?;RHEL 8 AppStream BaseOS
linux
A黄俊辉A13 小时前
axios+ts封装
开发语言·前端·javascript