次の方法で共有


LocalIrpProcessing の規則セット (WDM)

これらの規則を使用して、ドライバーによって作成された I/O 要求パケット (IRP) をドライバーが正しく処理することを確認します。

このセクションの内容

裁判官 説明

IoAllocateComplete

IoAllocateComplete 規則は、IRP が IoAllocateIrp で作成された場合、ドライバーが IoCompleteRequest を呼び出さないことを指定します。

IoAllocateFree

IoAllocateFree 規則は、以前に IoAllocateIrp で割り当てられた IRP でのみ、ドライバーが IoFreeIrp を使用することを指定します。

IoAllocateForward

IoAllocateForward 規則では、 IoAllocateIrp の呼び出しによって IRP が生成された場合、ドライバーは IoCallDriver または PoCallDriver を呼び出す前に完了ルーチンを設定する必要があることを指定します。

IoAllocateIrpSignalEventInCompletion

IoAllocateIrpSignalEventInCompletion ルールは、 Irp->PendingReturned フラグが設定され、完了ルーチンがローカルで作成された非同期 IRP を処理しているときに、ドライバーが完了ルーチンで KeSetEvent を呼び出す必要があることを指定します。

IoAllocateIrpSignalEventInCompletion2

IoAllocateIrpSignalEventInCompletion2 ルールは、 Irp->PendingReturned フラグが設定され、完了ルーチンがローカルで作成された非同期 IRP を処理しているときに、ドライバーが完了ルーチンで KeSetEvent を呼び出す必要があることを指定します。

IoAllocateIrpSignalEventInCompletion3

IoAllocateIrpSignalEventInCompletion3 ルールは、 Irp->PendingReturned フラグが設定され、完了ルーチンがローカルで作成された非同期 IRP を処理しているときに、ドライバーが完了ルーチンで KeSetEvent を呼び出す必要があることを指定します。

IoAllocateIrpSignalEventInCompletionTimeout

IoAllocateIrpSignalEventInCompletionTimeout ルールは、IRP のイベントが完了ルーチンで通知される必要があるため、下位のドライバーが戻るまで、このドライバーが無期限に待機することを検出した場合に、欠陥を報告します。

IoBuildDeviceControlNoFree

IoBuildDeviceControlNoFree 規則は、 IoBuildDeviceIoControlRequest を呼び出すドライバーが IoFreeIrp を呼び出してはならないことを指定します。

IoBuildDeviceControlWait

IoBuildDeviceControlWait ルールは、 IoCallDriver または PoCallDriver が STATUS_PENDING を返す場合に KeWaitForSingleObject ルーチンを呼び出す必要があることを指定します。

IoBuildDeviceControlWaitTimeout

IoBuildDeviceControlWaitTimeout ルールは、IRP のイベントが完了ルーチンで通知される必要があるため、下位のドライバーが戻るまで、このドライバーが無期限に待機することを検出した場合に、欠陥を報告します。

IoBuildDeviceIoControlSetEvent

IoBuildDeviceIoControlSetEvent ルールは、ドライバーが呼び出し元によって割り当てられ初期化されたイベント オブジェクトへのポインターを提供する場合、 IoBuildDeviceIoControlRequest を呼び出すドライバーが KeSetEvent を呼び出してはならないことを指定します。 KeSetEvent は、この IRP のドライバーによって呼び出される必要はありません。

IoBuildFsdComplete

IoBuildFsdComplete 規則は、 IRP が IoBuildAsynchronousFsdRequest で作成された場合、ドライバーが IoCompleteRequest を呼び出さないことを指定します。

IoBuildFsdForward

IoBuildFsdForward 規則は、ドライバーが IoCallDriver または PoCallDriver を呼び出す前に完了ルーチンを設定する必要があることを指定します。これは、 IoBuildAsynchronousFsdRequest の呼び出しによって IRP が生成された場合です。

IoBuildFsdFree

IoBuildFsdFree ルールでは、以前に IoBuildAsynchronousFsdRequest で割り当てられた IRP でのみ、ドライバーが IoFreeIrp を使用する必要があることを指定します。

IoBuildFsdIrpSignalEventInCompletion

IoBuildFsdIrpSignalEventInCompletion ルールは、 Irp->PendingReturned フラグが設定され、完了ルーチンがローカルで作成された非同期 IRP を処理しているときに、ドライバーが完了ルーチンで KeSetEvent を呼び出す必要があることを指定します。

IoBuildFsdIrpSignalEventInCompletion2

IoBuildFsdIrpSignalEventInCompletion2 ルールは、 Irp->PendingReturned フラグが設定され、完了ルーチンがローカルで作成された非同期 IRP を処理しているときに、ドライバーが完了ルーチンで KeSetEvent を呼び出す必要があることを指定します。

IoBuildFsdIrpSignalEventInCompletion3

IoBuildFsdIrpSignalEventInCompletion3 ルールは、 Irp->PendingReturned フラグが設定され、完了ルーチンがローカルで作成された非同期 IRP を処理しているときに、ドライバーが完了ルーチンで KeSetEvent を呼び出す必要があることを指定します。

IoBuildFsdIrpSignalEventInCompletionTimeout

IoBuildFsdIrpSignalEventInCompletionTimeout ルールは、IRP のイベントが完了ルーチンで通知される必要がある、下位ドライバーが戻るまでドライバーが無期限に待機するときに、欠陥を報告します。

IoBuildSynchronousFsdRequestNoFree

IoBuildSynchronousFsdRequestNoFree 規則は、 IoBuildSynchronousFsdRequest を呼び出すドライバーが IoFreeIrp を呼び出してはならないことを指定します。

IoBuildSynchronousFsdRequestWait

IoBuildSynchronousFsdRequestWait ルールは、 IoCallDriver または PoCallDriver が STATUS_PENDING を返す場合に KeWaitForSingleObject を呼び出す必要があることを指定します。

IoBuildSynchronousFsdRequestWaitTimeout

IoBuildSynchronousFsdRequestWaitTimeout ルールは、IRP のイベントが完了ルーチンで通知される必要があるため、下位のドライバーが戻るまで、このドライバーが無期限に待機することを検出した場合に、欠陥を報告します。

RequestedPowerIrp

RequestedPowerIrp 規則は、 *Irp ポインター変数が NULL に設定された PoRequestPowerIrp をドライバーが呼び出すよう指定します。

LocalIrpProcessing 規則セットを選択するには

  1. Microsoft Visual Studio でドライバー プロジェクト (.vcxProj) を選択します。 [ドライバー] メニューから [静的ドライバー検証ツールの起動...] をクリックします。

  2. [ルール] タブをクリックします。 [ルール セット] で、 [LocalIrpProcessing] を選択します。

    Visual Studio の開発者コマンド プロンプト ウィンドウから既定のルール セットを選択するには、 /check オプションで LocalIrpProcessing.sdv を指定します。 次に例を示します。

    msbuild /t:sdv /p:Inputs="/check:LocalIrpProcessing.sdv" mydriver.VcxProj /p:Configuration="Win8 Release" /p:Platform=Win32
    

    詳細については、「静的ドライバー検証ツールを使用して、ドライバーの欠陥を検出する」と「静的ドライバー検証ツールコマンド (MSBuild)」を参照してください。