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.