2

如何确定一段驱动程序代码的 IRQL 级别。PAGED_CODE() 宏指定这段代码可以在低于 DISPATCH_LEVEL 的 IRQL 级别中运行。但是如何确定确切的 IRQL 级别。

4

1 回答 1

4

KeGetCurrentIrql函数返回当前的 IRQL:

KIRQL KeGetCurrentIrql(void);

PAGED_CODE宏通过以下方式使用此函数:

#define PAGED_CODE() \
    if (KeGetCurrentIrql() > APC_LEVEL) { \
        KdPrint(( "EX: Pageable code called at IRQL %d\n", KeGetCurrentIrql() )); \
        ASSERT(FALSE); \
    }

这个宏应该放在任何可分页的函数中,如果在不允许分页的 IRQL 上调用该函数,它会使驱动程序崩溃。

于 2015-03-11T07:53:18.973 回答