次の方法で共有


DeferredRequestCompleted ルール (kmdf)

DeferredRequestCompleted ルールは、ドライバーの既定の I/O キューに提示された I/O 要求がコールバック関数で完了せず、後処理のために遅延される場合、要求がフレームワークに転送されて配信されない、または WdfRequestStopAcknowledge メソッドが呼び出されない限り、遅延処理コールバック関数で要求を完了しなければならないことを指定します。

DeferredRequestCompleted ルールでは、__sdv_save_request マクロと __sdv_retrieve_request マクロを使用して遅延要求を識別することが求められます。 これらのマクロの使用方法については、「遅延プロシージャ呼び出しの __sdv_save_request と __sdv_retrieve_request の使用」を参照してください。 前提条件ルール AliasWithinTimerDpc は、現存のこれらのマクロを確認します。

次の場合を除き、キューコールバック関数のいずれかを介してドライバーの既定のキューに提示される要求は、I/O 要求コールバック関数から終了する前に完了していなければなりません。

  • I/O 要求が I/O ターゲットまたは別のキューに転送されました

  • I/O 要求がフレームワークに配信されました (WdfDeviceEnqueueRequest を呼び出すことによって)

  • WdfRequestStopAcknowledge メソッドが呼び出されました

このルールは、ドライバーが次のコールバック関数から終了したときに検証されます。

  • キューの EvtIoStopEvtCleanupCallback、または EvtDestroyCallback

  • ファイル オブジェクトの EvtCleanupCallback または EvtDestroyCallback

  • EvtFileCloseEvtFileCleanupEvtDeviceSelfManagedIoSuspendEvtDeviceSelfManagedIoFlushEvtDeviceSelfManagedIoCleanupEvtDeviceShutdownNotificationEvtDeviceSurpriseRemovalEvtCleanupCallback または EvtDestroyCallback

  • EvtDriverUnload

I/O 要求プレゼンテーションの I/O キュー コールバック関数は 、EvtIoDefaultEvtIoReadEvtIoWriteEvtIoDeviceControlEvtIoInternalDeviceControl です。

I/O 要求の遅延処理コールバック関数は、EvtTimerFuncEvtDpcFuncEvtInterruptDpcEvtInterruptEnableEvtInterruptDisableEvtWorkItem です。

DeferredRequestCompleted ルールは、WdfRequestMarkCancelableWdfDmaTransactionInitializeUsingRequestWdfDmaTransactionInitialize、または WdfWorkItemEnqueue メソッドの呼び出しを使用して、I/O 要求が遅延されていることを示します。

ドライバーモデル: KMDF

テスト方法

コンパイル時

静的ドライバー検証ツール を実行し、DeferredRequestCompleted ルールを指定します。

コードの分析を実行するには、次の手順に従います。
  1. コードを準備します (ロール型宣言を使用します)。
  2. 静的ドライバー検証ツールを実行します。
  3. 結果を表示および分析します。

詳細については、 「静的ドライバー検証ツールを使用してドライバー の欠陥を見つける」を参照してください。

適用対象

WdfDeviceEnqueueRequestWdfDmaTransactionInitializeWdfDmaTransactionInitializeUsingRequestWdfIoTargetSendInternalIoctlOthersSynchronouslyWdfIoTargetSendInternalIoctlSynchronouslyWdfIoTargetSendIoctlSynchronouslyWdfIoTargetSendReadSynchronouslyWdfIoTargetSendWriteSynchronouslyWdfRequestCompleteWdfRequestCompleteWithInformationWdfRequestCompleteWithPriorityBoostWdfRequestForwardToIoQueueWdfRequestMarkCancelableWdfRequestMarkCancelableExWdfRequestSendWdfRequestStopAcknowledgeWdfRequestUnmarkCancelableWdfWorkItemEnqueue