我是 Windows 设备驱动程序编程的新手。我知道某些操作只能在 IRQL 执行PASSIVE_LEVEL
。例如,微软有这个如何从内核驱动程序写入文件的示例代码:
if (KeGetCurrentIrql() != PASSIVE_LEVEL)
return STATUS_INVALID_DEVICE_STATE;
Status = ZwCreateFile(...);
我的问题是:是什么阻止了在上述KeGetCurrentIrql()
检查后提出 IRQL?假设发生上下文或线程切换,当它返回到我的驱动程序时,IRQL 会不会突然出现,DISPATCH_LEVEL
这会导致系统崩溃?
如果这是不可能的,那么为什么不只检查DriverEntry
函数中的 IRQL 并一劳永逸地完成它呢?