IrpPending の規則セット (WDM)

これらのルールを使用して、ドライバーが I/O 要求パケット (IRP) を正しく保留するかを確認します。

このセクションの内容

裁判官 説明

MarkDevicePower

MarkDevicePower ルールは、S0 に移行する SystemPowerState IRP の IRP_MN_Standard Edition T_POWER を持つ IRP_MJ_POWER が保留されるよう指定します。

MarkingInterlockedQueuedIrps

MarkingInterlockedQueuedIrps ルールは、ドライバーがさらに処理するためにインターロック方式でキューに登録する前にIRP を保留中として正しくマークするよう指定します。

MarkingQueuedIrps

MarkingQueuedIrps ルールは、ドライバーが IoMarkIrpPending スピン ロックを保持している間だけ、さらに処理を必要とする IRP を呼び出すよう指定します。 このルールは、ドライバーがドライバー管理のキューに IRP を追加する場合にのみ適用されます。

MarkIrpPending

MarkIrpPending ルールは、ドライバー ディスパッチ ルーチンが IoMarkIrpPending を呼び出すたびに、ディスパッチ ルーチンの終了時に STATUS_PENDING を返すように指定します。 無料仕様については、MarkIrpPending2 を参照してください。

MarkIrpPending2

MarkIrpPending2 ルールは、ディスパッチ ルーチンが STATUS_PENDING を返す場合、IoMarkIrpPending を呼び出したか、下位のドライバーに IRP を渡したかを指定します。 無料仕様については、MarkIrpPending を参照してください。

MarkPower

MarkPower ルールは、S0 に移行する SystemPowerState IRP の IRP_MN_Standard Edition T_POWER を持つ IRP_MJ_POWER が保留されるよう指定します。 この規則は、FDO ドライバーと FIDO ドライバーだけに適用されます。

MarkPowerDown

MarkPowerDown ルールは、s0 から [S1...S5] に移行する SystemPowerState IRP の IRP_MN_Standard Edition T_POWER を持つ IRP_MJ_POWER が保留されるよう指定します。

MarkQueryRelations

MarkQueryRelations ルールは 、 ドライバーが IRP_MN_QUERY_DEVICE_RELATIONS IRP を保留する必要があることを指定します。

MarkStartDevice

MarkStartDevice ルールは、ドライバーが IRP_MN_START_DEVICE IRP を正しく保留することを指定します。 この規則は、FDO ドライバーと FIDO ドライバーだけに適用されます。

PendedCompletedRequest

PendedCompletedRequest ルールは、ドライバーが受信 IRP で IoCompleteRequest を呼び出した場合、ドライバーのディスパッチ ルーチンが IRP のSTATUS_PENDING を返さないよう指定します。

PendedCompletedRequest2

PendedCompletedRequest2 ルールは、ディスパッチ ルーチンが保留中の IRP を完了する可能性があるため、IoCallDriver または PoCallDriver の呼び出し後に待機が必要であることを指定します。

PendedCompletedRequest3

PendedCompletedRequest3 ルールは、保留中の IRP を IoCompleteRequest の呼び出しで完了しないように指定します。

PendedCompletedRequestEx

PendedCompletedRequestEx ルールは、保留中の IRP に対してドライバーが IoCompleteRequest を呼び出さないよう指定します。

StartDeviceWait

StartDeviceWait ルールは、ドライバーが開始デバイス IRP のコンテキストで KeWaitForSingleObject を呼び出す必要がないことを指定します。

StartDeviceWait2

StartDeviceWait2 ルールは、ドライバーが開始デバイス IRP のコンテキストで KeWaitForSingleObject を呼び出す必要がないことを指定します。

StartDeviceWait3

StartDeviceWait3 ルールは、ドライバーが開始デバイス IRP のコンテキストで KeWaitForSingleObject を呼び出す必要がないことを指定します。

StartDeviceWait4

StartDeviceWait4 ルールは、ドライバーが開始デバイス IRP のコンテキストで KeWaitForSingleObject を呼び出す必要がないことを指定します。

IrpPending ルールセットを選択するには

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

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

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

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

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