共用方式為


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 方法

當驅動程式從下列回呼函式結束時,會驗證此規則:

  • 佇列的 EvtIoStopEvtCleanupCallbackEvtDestroyCallback

  • 檔案物件的 EvtCleanupCallbackEvtDestroyCallback

  • EvtFileCloseEvtFileCleanupEvtDeviceSelfManagedIoSuspendEvtDeviceSelfManagedIoFlushEvtDeviceSelfManagedIoCleanupEvtDeviceShutdownNotificationEvtDeviceSurpriseRemovalEvtCleanupCallbackEvtDestroyCallback for the device

  • EvtDriverUnload

I/O 要求簡報的 I/O 佇列回呼函式為 EvtIoDefaultEvtIoRead、EvtIoDeviceControl 和 EvtIoInternalDeviceControl

I/O 要求的延遲處理回呼函式為 EvtTimerFuncEvtDpcFuncEvtInterruptDpcEvtInterruptEnable、EvtInterruptDisableEvtWorkItem

DeferredRequestCompleted 規則會使用對 WdfRequestMarkCancelableWdfDmaTransactionInitializeUsingRequestWdfDmaTransactionInitializeWdfWorkItemEnqueue 方法的呼叫來指出 I/O 要求已延遲。

驅動程式模型:KMDF

測試方法

在編譯時期

執行 靜態驅動程序驗證器 ,並指定 DeferredRequestCompleted 規則。

使用下列步驟來執行程式碼的分析:
  1. 準備程式代碼 (使用角色類型宣告) 。
  2. 執行靜態驅動程式驗證程式。
  3. 檢視和分析結果。

如需詳細資訊,請參閱 使用靜態驅動程式驗證器在驅動程式中尋找瑕疵

適用於

WdfDeviceEnqueueRequestWdfDmaTransactionInitializeWdfDmaTransactionInitializeUsingRequestWdfIoTargetSendInternalIoctlOthersSynchronouslyWdfIoTargetSendInternalIoctlSynchronouslyWdfIoTargetSendIoctlSynchronouslyWdfIoTargetSendReadSynchronouslyWdfIoTargetSendWriteSynchronouslyWdfRequestCompleteWdfRequestCompleteWithInformationWdfRequestCompleteWithPriorityBoostWdfRequestForwardToIoQueueWdfRequestMarkCancelableWdfRequestMarkCancelableExWdfRequestSendWdfRequestStopAcknowledgeWdfRequestUnmarkCancelableWdfWorkItemEnqueue