#pragma once // ke_irql.h - software IRQL skeleton // // This is intentionally small for the first IRQL/APC bring-up step. It does // not yet program interrupt hardware or replace the spinlock interrupt-disable // path. It gives the kernel one authoritative execution-level state plus // assertions so blocking code can reject illegal callers early. #include typedef uint8_t KIRQL; #define PASSIVE_LEVEL ((KIRQL)0) #define APC_LEVEL ((KIRQL)1) #define DISPATCH_LEVEL ((KIRQL)2) #define DIRQL_BASE ((KIRQL)16) #define HIGH_LEVEL ((KIRQL)31) __declspec(dllexport) KIRQL KeGetCurrentIrql(void); // Raise to newIrql and return the previous level. Raising to a lower level is // a kernel bug and will panic in checked/debug-style builds. __declspec(dllexport) KIRQL KeRaiseIrql(KIRQL newIrql); // Restore a previously returned level. Lowering to a higher level is a kernel // bug and will panic. __declspec(dllexport) void KeLowerIrql(KIRQL oldIrql); __declspec(dllexport) void KeAssertIrql(KIRQL expected); __declspec(dllexport) void KeAssertIrqlAtOrBelow(KIRQL maxIrql); __declspec(dllexport) int KeCanWait(void); // Internal/debug helper used by diagnostics and panic messages. __declspec(dllexport) const char* KeIrqlName(KIRQL irql);