Determining IRQL level

1.7k Views Asked by At

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.

1

There are 1 best solutions below

4
Alex F On BEST ANSWER

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.