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 メソッドが呼び出されました
このルールは、ドライバーが次のコールバック関数から終了したときに検証されます。
キューの EvtIoStop、EvtCleanupCallback、または EvtDestroyCallback
ファイル オブジェクトの EvtCleanupCallback または EvtDestroyCallback
EvtFileClose、EvtFileCleanup、EvtDeviceSelfManagedIoSuspend、EvtDeviceSelfManagedIoFlush、EvtDeviceSelfManagedIoCleanup、EvtDeviceShutdownNotification、EvtDeviceSurpriseRemoval、EvtCleanupCallback または EvtDestroyCallback
EvtDriverUnload
I/O 要求プレゼンテーションの I/O キュー コールバック関数は 、EvtIoDefault、 EvtIoRead、 EvtIoWrite、 EvtIoDeviceControl、EvtIoInternalDeviceControl です。
I/O 要求の遅延処理コールバック関数は、EvtTimerFunc、EvtDpcFunc、EvtInterruptDpc、EvtInterruptEnable、EvtInterruptDisable、EvtWorkItem です。
DeferredRequestCompleted ルールは、WdfRequestMarkCancelable、WdfDmaTransactionInitializeUsingRequest、WdfDmaTransactionInitialize、または WdfWorkItemEnqueue メソッドの呼び出しを使用して、I/O 要求が遅延されていることを示します。
ドライバーモデル: KMDF
テスト方法
コンパイル時 |
---|
静的ドライバー検証ツール を実行し、DeferredRequestCompleted ルールを指定します。 コードの分析を実行するには、次の手順に従います。詳細については、 「静的ドライバー検証ツールを使用してドライバー の欠陥を見つける」を参照してください。 |
適用対象
WdfDeviceEnqueueRequestWdfDmaTransactionInitializeWdfDmaTransactionInitializeUsingRequestWdfIoTargetSendInternalIoctlOthersSynchronouslyWdfIoTargetSendInternalIoctlSynchronouslyWdfIoTargetSendIoctlSynchronouslyWdfIoTargetSendReadSynchronouslyWdfIoTargetSendWriteSynchronouslyWdfRequestCompleteWdfRequestCompleteWithInformationWdfRequestCompleteWithPriorityBoostWdfRequestForwardToIoQueueWdfRequestMarkCancelableWdfRequestMarkCancelableExWdfRequestSendWdfRequestStopAcknowledgeWdfRequestUnmarkCancelableWdfWorkItemEnqueue