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.
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.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With