IrpPending の規則セット (WDM)
これらのルールを使用して、ドライバーが I/O 要求パケット (IRP) を正しく保留するかを確認します。
このセクションの内容
裁判官 | 説明 |
---|---|
MarkDevicePower ルールは、S0 に移行する SystemPowerState IRP の IRP_MN_Standard Edition T_POWER を持つ IRP_MJ_POWER が保留されるよう指定します。 |
|
MarkingInterlockedQueuedIrps ルールは、ドライバーがさらに処理するためにインターロック方式でキューに登録する前にIRP を保留中として正しくマークするよう指定します。 |
|
MarkingQueuedIrps ルールは、ドライバーが IoMarkIrpPending スピン ロックを保持している間だけ、さらに処理を必要とする IRP を呼び出すよう指定します。 このルールは、ドライバーがドライバー管理のキューに IRP を追加する場合にのみ適用されます。 |
|
MarkIrpPending ルールは、ドライバー ディスパッチ ルーチンが IoMarkIrpPending を呼び出すたびに、ディスパッチ ルーチンの終了時に STATUS_PENDING を返すように指定します。 無料仕様については、MarkIrpPending2 を参照してください。 |
|
MarkIrpPending2 ルールは、ディスパッチ ルーチンが STATUS_PENDING を返す場合、IoMarkIrpPending を呼び出したか、下位のドライバーに IRP を渡したかを指定します。 無料仕様については、MarkIrpPending を参照してください。 |
|
MarkPower ルールは、S0 に移行する SystemPowerState IRP の IRP_MN_Standard Edition T_POWER を持つ IRP_MJ_POWER が保留されるよう指定します。 この規則は、FDO ドライバーと FIDO ドライバーだけに適用されます。 |
|
MarkPowerDown ルールは、s0 から [S1...S5] に移行する SystemPowerState IRP の IRP_MN_Standard Edition T_POWER を持つ IRP_MJ_POWER が保留されるよう指定します。 |
|
MarkQueryRelations ルールは 、 ドライバーが IRP_MN_QUERY_DEVICE_RELATIONS IRP を保留する必要があることを指定します。 |
|
MarkStartDevice ルールは、ドライバーが IRP_MN_START_DEVICE IRP を正しく保留することを指定します。 この規則は、FDO ドライバーと FIDO ドライバーだけに適用されます。 |
|
PendedCompletedRequest ルールは、ドライバーが受信 IRP で IoCompleteRequest を呼び出した場合、ドライバーのディスパッチ ルーチンが IRP のSTATUS_PENDING を返さないよう指定します。 |
|
PendedCompletedRequest2 ルールは、ディスパッチ ルーチンが保留中の IRP を完了する可能性があるため、IoCallDriver または PoCallDriver の呼び出し後に待機が必要であることを指定します。 |
|
PendedCompletedRequest3 ルールは、保留中の IRP を IoCompleteRequest の呼び出しで完了しないように指定します。 |
|
PendedCompletedRequestEx ルールは、保留中の IRP に対してドライバーが IoCompleteRequest を呼び出さないよう指定します。 |
|
StartDeviceWait ルールは、ドライバーが開始デバイス IRP のコンテキストで KeWaitForSingleObject を呼び出す必要がないことを指定します。 |
|
StartDeviceWait2 ルールは、ドライバーが開始デバイス IRP のコンテキストで KeWaitForSingleObject を呼び出す必要がないことを指定します。 |
|
StartDeviceWait3 ルールは、ドライバーが開始デバイス IRP のコンテキストで KeWaitForSingleObject を呼び出す必要がないことを指定します。 |
|
StartDeviceWait4 ルールは、ドライバーが開始デバイス IRP のコンテキストで KeWaitForSingleObject を呼び出す必要がないことを指定します。 |
IrpPending ルールセットを選択するには
Microsoft Visual Studio でドライバー プロジェクト (.vcxProj) を選択します。 [ドライバー] メニューから [静的ドライバー検証ツールの起動...] をクリックします。
[ルール] タブをクリックします。[ルール セット] で、[IrpPending] を選択します。
Visual Studio の開発者コマンド プロンプト ウィンドウから既定のルール セットを選択するには、/check オプションで IrpPending.sdv を指定します。 次に例を示します。
msbuild /t:sdv /p:Inputs="/check:IrpPending.sdv" mydriver.VcxProj /p:Configuration="Win8 Release" /p:Platform=Win32
詳細については、「静的ドライバー検証ツールを使用して、ドライバーの欠陥を検出する」と「静的ドライバー検証ツールコマンド (MSBuild)」を参照してください。