草庐IT

KeGetCurrentIrql

全部标签

windows - 确定 IRQL 级别

如何确定一段驱动程序代码的IRQL级别。PAGED_CODE()宏指定该段代码可以在低于DISPATCH_LEVEL的IRQL级别上运行。但是无法确定确切的IRQL级别。 最佳答案 KeGetCurrentIrql函数返回当前IRQL:KIRQLKeGetCurrentIrql(void);PAGED_CODE宏通过以下方式使用此功能:#definePAGED_CODE()\if(KeGetCurrentIrql()>APC_LEVEL){\KdPrint(("EX:PageablecodecalledatIRQL%d\n",KeG

windows - 设备驱动程序 IRQL 和线程/上下文切换

我是Windows设备驱动程序编程的新手。我知道某些操作只能在IRQLPASSIVE_LEVEL执行。例如,Microsoft有关于如何从内核驱动程序写入文件的示例代码:if(KeGetCurrentIrql()!=PASSIVE_LEVEL)returnSTATUS_INVALID_DEVICE_STATE;Status=ZwCreateFile(...);我的问题是:是什么阻止了在上面的KeGetCurrentIrql()检查之后引发IRQL?假设发生上下文或线程切换,当它返回到我的驱动程序时,IRQL会不会突然变为DISPATCH_LEVEL,然后导致系统崩溃?如果这不可能,那么