Windows デバイス ドライバーのプログラミングは初めてです。特定の操作は IRQL でのみ実行できることを知っていPASSIVE_LEVEL
ます。たとえば、Microsoft には、カーネル ドライバーからファイルに書き込む方法の次のサンプル コードがあります。
if (KeGetCurrentIrql() != PASSIVE_LEVEL)
return STATUS_INVALID_DEVICE_STATE;
Status = ZwCreateFile(...);
KeGetCurrentIrql()
私の質問は次のとおりです。上記のチェック後に IRQL が発生するのを妨げているのは何ですか? コンテキストまたはスレッドの切り替えが発生したとします。IRQL がDISPATCH_LEVEL
ドライバーに戻ったときに突然発生し、システム クラッシュが発生することはありませんか?
これが不可能な場合は、DriverEntry
関数内の IRQL をチェックして、一度だけ実行してみませんか?