LocalIrpProcessing の規則セット (WDM)
これらの規則を使用して、ドライバーによって作成された I/O 要求パケット (IRP) をドライバーが正しく処理することを確認します。
このセクションの内容
裁判官 | 説明 |
---|---|
IoAllocateComplete 規則は、IRP が IoAllocateIrp で作成された場合、ドライバーが IoCompleteRequest を呼び出さないことを指定します。 |
|
IoAllocateFree 規則は、以前に IoAllocateIrp で割り当てられた IRP でのみ、ドライバーが IoFreeIrp を使用することを指定します。 |
|
IoAllocateForward 規則では、 IoAllocateIrp の呼び出しによって IRP が生成された場合、ドライバーは IoCallDriver または PoCallDriver を呼び出す前に完了ルーチンを設定する必要があることを指定します。 |
|
IoAllocateIrpSignalEventInCompletion ルールは、 Irp->PendingReturned フラグが設定され、完了ルーチンがローカルで作成された非同期 IRP を処理しているときに、ドライバーが完了ルーチンで KeSetEvent を呼び出す必要があることを指定します。 |
|
IoAllocateIrpSignalEventInCompletion2 ルールは、 Irp->PendingReturned フラグが設定され、完了ルーチンがローカルで作成された非同期 IRP を処理しているときに、ドライバーが完了ルーチンで KeSetEvent を呼び出す必要があることを指定します。 |
|
IoAllocateIrpSignalEventInCompletion3 ルールは、 Irp->PendingReturned フラグが設定され、完了ルーチンがローカルで作成された非同期 IRP を処理しているときに、ドライバーが完了ルーチンで KeSetEvent を呼び出す必要があることを指定します。 |
|
IoAllocateIrpSignalEventInCompletionTimeout ルールは、IRP のイベントが完了ルーチンで通知される必要があるため、下位のドライバーが戻るまで、このドライバーが無期限に待機することを検出した場合に、欠陥を報告します。 |
|
IoBuildDeviceControlNoFree 規則は、 IoBuildDeviceIoControlRequest を呼び出すドライバーが IoFreeIrp を呼び出してはならないことを指定します。 |
|
IoBuildDeviceControlWait ルールは、 IoCallDriver または PoCallDriver が STATUS_PENDING を返す場合に KeWaitForSingleObject ルーチンを呼び出す必要があることを指定します。 |
|
IoBuildDeviceControlWaitTimeout ルールは、IRP のイベントが完了ルーチンで通知される必要があるため、下位のドライバーが戻るまで、このドライバーが無期限に待機することを検出した場合に、欠陥を報告します。 |
|
IoBuildDeviceIoControlSetEvent ルールは、ドライバーが呼び出し元によって割り当てられ初期化されたイベント オブジェクトへのポインターを提供する場合、 IoBuildDeviceIoControlRequest を呼び出すドライバーが KeSetEvent を呼び出してはならないことを指定します。 KeSetEvent は、この IRP のドライバーによって呼び出される必要はありません。 |
|
IoBuildFsdComplete 規則は、 IRP が IoBuildAsynchronousFsdRequest で作成された場合、ドライバーが IoCompleteRequest を呼び出さないことを指定します。 |
|
IoBuildFsdForward 規則は、ドライバーが IoCallDriver または PoCallDriver を呼び出す前に完了ルーチンを設定する必要があることを指定します。これは、 IoBuildAsynchronousFsdRequest の呼び出しによって IRP が生成された場合です。 |
|
IoBuildFsdFree ルールでは、以前に IoBuildAsynchronousFsdRequest で割り当てられた IRP でのみ、ドライバーが IoFreeIrp を使用する必要があることを指定します。 |
|
IoBuildFsdIrpSignalEventInCompletion ルールは、 Irp->PendingReturned フラグが設定され、完了ルーチンがローカルで作成された非同期 IRP を処理しているときに、ドライバーが完了ルーチンで KeSetEvent を呼び出す必要があることを指定します。 |
|
IoBuildFsdIrpSignalEventInCompletion2 ルールは、 Irp->PendingReturned フラグが設定され、完了ルーチンがローカルで作成された非同期 IRP を処理しているときに、ドライバーが完了ルーチンで KeSetEvent を呼び出す必要があることを指定します。 |
|
IoBuildFsdIrpSignalEventInCompletion3 ルールは、 Irp->PendingReturned フラグが設定され、完了ルーチンがローカルで作成された非同期 IRP を処理しているときに、ドライバーが完了ルーチンで KeSetEvent を呼び出す必要があることを指定します。 |
|
IoBuildFsdIrpSignalEventInCompletionTimeout ルールは、IRP のイベントが完了ルーチンで通知される必要がある、下位ドライバーが戻るまでドライバーが無期限に待機するときに、欠陥を報告します。 |
|
IoBuildSynchronousFsdRequestNoFree 規則は、 IoBuildSynchronousFsdRequest を呼び出すドライバーが IoFreeIrp を呼び出してはならないことを指定します。 |
|
IoBuildSynchronousFsdRequestWait ルールは、 IoCallDriver または PoCallDriver が STATUS_PENDING を返す場合に KeWaitForSingleObject を呼び出す必要があることを指定します。 |
|
IoBuildSynchronousFsdRequestWaitTimeout ルールは、IRP のイベントが完了ルーチンで通知される必要があるため、下位のドライバーが戻るまで、このドライバーが無期限に待機することを検出した場合に、欠陥を報告します。 |
|
RequestedPowerIrp 規則は、 |
LocalIrpProcessing 規則セットを選択するには
Microsoft Visual Studio でドライバー プロジェクト (.vcxProj) を選択します。 [ドライバー] メニューから [静的ドライバー検証ツールの起動...] をクリックします。
[ルール] タブをクリックします。 [ルール セット] で、 [LocalIrpProcessing] を選択します。
Visual Studio の開発者コマンド プロンプト ウィンドウから既定のルール セットを選択するには、 /check オプションで LocalIrpProcessing.sdv を指定します。 次に例を示します。
msbuild /t:sdv /p:Inputs="/check:LocalIrpProcessing.sdv" mydriver.VcxProj /p:Configuration="Win8 Release" /p:Platform=Win32
詳細については、「静的ドライバー検証ツールを使用して、ドライバーの欠陥を検出する」と「静的ドライバー検証ツールコマンド (MSBuild)」を参照してください。