2

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.

SomeWittyUsername
  • 18,025
  • 3
  • 42
  • 85
Reena Cyril
  • 417
  • 4
  • 11

1 Answers1

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