다음을 통해 공유


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, EvtIoDeviceControlEvtIoInternalDeviceControl입니다.

I/O 요청에 대한 지연 처리 콜백 함수는 EvtTimerFunc, EvtDpcFunc, EvtInterruptDpc, EvtInterruptEnable, EvtInterruptDisableEvtWorkItem입니다.

DeferredRequestCompleted 규칙은 WdfRequestMarkCancelable, WdfDmaTransactionInitializeUsingRequest, WdfDmaTransactionInitialize 또는 WdfWorkItemEnqueue 메서드에 대한 호출을 사용하여 I/O 요청이 지연되고 있음을 나타냅니다.

드라이버 모델: KMDF

테스트 방법

컴파일 시

정적 드라이버 검증 도구를 실행하고 DeferredRequestCompleted 규칙을 지정합니다.

다음 단계를 사용하여 코드 분석을 실행합니다.
  1. 코드를 준비합니다(역할 형식 선언 사용).
  2. 정적 드라이버 검증 도구를 실행합니다.
  3. 결과를 보고 분석합니다.

자세한 내용은 정적 드라이버 검증 도구를 사용하여 드라이버에서 결함 찾기를 참조하세요.

적용 대상

WdfDeviceEnqueueRequestWdfDmaTransactionInitializeWdfDmaTransactionInitializeUsingRequestWdfIoTargetSendInternalIoctlOthersSynchronouslyWdfIoTargetSendInternalIoctlWdfIoTargetSendIoctlSynchronousouslyWdfIoTargetSendReadSynchronouslyWdfIoTargetSendWriteSynchronouslyWdfRequestCompleteWdfRequestCompleteWithInformationWdfRequestCompleteWithPriorityBoostWdfRequestForwardToIoQueueWdfRequestMarkCancelableWdfRequestMarkCancelableExWdfRequestSendWdfRequestStopAcknowledgeWdfRequestUnmarkCancelableWdfWorkItemEnqueue