How can the IRQL Level of a piece of driver code be determined. PAGED_CODE() macro specifies that the piece of code can be run in an IRQL level less than DISPATCH_LEVEL.But haw can the exact IRQL Level be determined.
Asked
Active
Viewed 1,568 times
1 Answers
5
KeGetCurrentIrql
function returns the current IRQL:
KIRQL KeGetCurrentIrql(void);
PAGED_CODE
macro uses this function by the following way:
#define PAGED_CODE() \
if (KeGetCurrentIrql() > APC_LEVEL) { \
KdPrint(( "EX: Pageable code called at IRQL %d\n", KeGetCurrentIrql() )); \
ASSERT(FALSE); \
}
This macro should be placed to any pageable function, it crashes the driver in the case when the function is called at IRQL that doesn't allow paging.

Alex F
- 42,307
- 41
- 144
- 212
-
Thanks for the answer. Is there any way to set the Irql Level for a function? – Reena Cyril Mar 11 '15 at 08:58
-
IRQL is not a function attribute. Every function starts on the same IRQL as its caller. There are many ways to change current IRQL, like `KeRaiseIrql` and different synchronization functions. – Alex F Mar 11 '15 at 09:09
-
Thanks Alex. Ive got the info I was looking for. – Reena Cyril Mar 11 '15 at 09:11
-
Note, this macro is useful on checked builds only. On a release build it's a NOP – SomeWittyUsername Mar 13 '15 at 15:06