当前位置: 首页 > article >正文

2.4.ReactOS系统运行级别IRQL的切换

2.4.ReactOS系统运行级别IRQL的切换

2.4.ReactOS系统运行级别IRQL的切换

文章目录

  • 2.4.ReactOS系统运行级别IRQL的切换
  • HalpLowerIrql函数


HalpLowerIrql函数


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的级别

//
// IRQL Levels
//
#define PASSIVE_LEVEL                           0x0
#define APC_LEVEL                               0x1
#define DISPATCH_LEVEL                          0x2
#define CLOCK2_LEVEL                            0x1C
#define HIGH_LEVEL                              0x1F

http://www.kler.cn/a/349448.html

相关文章:

  • Python案例 | 测试网络的下载速度上传速度和 ping 延迟
  • 春意盎然:Spring Boot课程答疑系统
  • Redis的应用以及Redis工具类的封装
  • Vue2项目中使用 echarts(5.2.2)图表组件含代码(二)
  • 【旋转数组】二分法专题
  • HDLBits中文版,标准参考答案 | 3.3 Building Larger Circuits | 构建更大的电路
  • 本地生活全域抽佣系统--本地生活服务商的便捷运营平台
  • 使用C++写一个自己定义的图像格式,写入磁盘
  • unity学习-灯光类型
  • 高可用之限流 08-leaky bucket漏桶算法
  • leetcode解题思路分析(一百六十一)1394 - 1400 题
  • ros service不走是为什么
  • STM32的独立看门狗定时器(IWDG)技术介绍
  • spring面试之2024
  • 【量化交易】聚宽安装
  • Linux虚拟化技术嬗变综述
  • MeterSphere接口自动化平台调试
  • 使用 Spring 框架构建 MVC 应用程序:初学者教程
  • 【三】【算法】P1007 独木桥,P1012 [NOIP1998 提高组] 拼数,P1019 [NOIP2000 提高组] 单词接龙
  • 元学习案例(学习如何学习)