IRP を完了するタイミング
ドライバーは、次のいずれかの条件が満たされたときに IRP の完了を開始する必要があります。
ドライバーは、無効なパラメーターまたはその他の条件のため IRP 処理を進行できないことを判断します。
ドライバーは、IRP をドライバー スタックに渡すことなく、要求された I/O 操作を処理することができ、操作が完了しました。
IRP が取り消されています。 ( IRPの取り消し参照)
これらの条件が満たされていない場合、ドライバーのディスパッチ ルーチンは、次の下位ドライバーに IRP を渡すか、I/O 要求の処理を行う必要があります。 いずれかの条件が満たされた場合、ドライバーは IoCompleteRequestを呼び出す必要があります。
処理が進められない場合、または実際にデバイスにアクセスせずに要求された操作を処理することによって要求を完了した場合、通常、ディスパッチ ルーチンの 1 つから IoCompleteRequest を呼び出します。 詳細については、 「ディスパッチ ルーチンでの IRP の完了」を参照してください。
ドライバーが要求を満たすためにデバイスにアクセスする必要がある場合は、通常、 IoCompleteRequest を DpcForIsr ルーチンから呼び出します。 これらのルーチンについては、 「サービス割り込み」で詳しく説明します。