确定 IRQL 级别
Determining IRQL level
如何判断一段驱动代码的IRQL Level。 PAGED_CODE() 宏指定该段代码可以 运行 IRQL 级别低于 DISPATCH_LEVEL.But haw 可以确定确切的 IRQL 级别。
KeGetCurrentIrql
函数returns当前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 上调用该函数,它会使驱动程序崩溃。
如何判断一段驱动代码的IRQL Level。 PAGED_CODE() 宏指定该段代码可以 运行 IRQL 级别低于 DISPATCH_LEVEL.But haw 可以确定确切的 IRQL 级别。
KeGetCurrentIrql
函数returns当前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 上调用该函数,它会使驱动程序崩溃。