다음을 통해 공유


IWDFIoRequest2::StopAcknowledge 메서드(wudfddi.h)

[경고: UMDF 2는 UMDF의 최신 버전이며 UMDF 1을 대체합니다. 모든 새 UMDF 드라이버는 UMDF 2를 사용하여 작성해야 합니다. UMDF 1에 새 기능이 추가되지 않으며 최신 버전의 Windows 10 UMDF 1에 대한 지원이 제한되어 있습니다. 유니버설 Windows 드라이버는 UMDF 2를 사용해야 합니다. 자세한 내용은 UMDF를 사용하여 시작 참조하세요.]

StopAcknowledge 메서드는 드라이버가 지정된 I/O 요청 처리를 중지했음을 프레임워크에 알릴 수 있습니다.

구문

void StopAcknowledge(
  [in] BOOL Requeue
);

매개 변수

[in] Requeue

TRUE이면 프레임워크가 요청을 큐에 다시 큐에 넣도록 하는 부울 값으로, 프레임워크가 다시 드라이버에 배달합니다. FALSE인 경우 프레임워크는 요청을 다시 큐에 추가하지 않습니다. 자세한 내용은 아래 설명 부분을 참조하십시오.

반환 값

없음

설명

드라이버가 I/O 큐에 대해 IQueueCallbackIoStop::OnIoStop 콜백 함수를 등록하는 경우 프레임워크는 큐의 기본 디바이스가 작동 중(D0) 상태를 떠날 때 호출합니다. 프레임워크는 큐가 중지될 때 드라이버가 소유하는 모든 I/O 요청에 대해 이 콜백 함수를 호출합니다. 드라이버는 다음 중 하나를 수행하여 각 요청의 처리를 완료, 취소 또는 연기해야 합니다.

  • 드라이버가 요청을 소유하는 경우 IWDFIoRequest::Complete 를 호출하여 요청을 완료하거나 취소할 수 있습니다.
  • 드라이버가 I/O 대상에 요청을 전달한 경우 IWDFIoRequest::CancelSentRequest 를 호출하여 요청을 취소할 수 있습니다.
  • 드라이버가 요청 처리를 연기하면 StopAcknowledge를 호출해야 합니다.
드라이버가 StopAcknowledge를 호출하는 경우 IQueueCallbackIoStop::OnIoStop 콜백 함수 내에서 이 메서드를 호출해야 합니다.

드라이버가 IQueueCallbackIoStop::OnIoStop 콜백 함수가 수신하는 모든 요청에 대해 IWDFIoRequest::Complete 또는 StopAcknowledge를 호출하지 않는 경우 프레임워크는 디바이스가 작동(D0) 상태를 벗어나도록 허용하지 않습니다. 이 동작이 실행되지 않으면 시스템이 최대 절전 모드 상태 또는 다른 낮은 시스템 전원 상태로 전환되지 않도록 방지할 수 있습니다.

드라이버의 IQueueCallbackIoStop::OnIoStop 콜백 함수가 StopAcknowledge를 호출하는 경우 Requeue 매개 변수를 TRUE 또는 FALSE로 설정할 수 있습니다.

  • RequeueTRUE로 설정하면 프레임워크가 요청을 해당 I/O 큐에 다시 배치합니다.

    기본 디바이스가 작동(D0) 상태로 돌아오면 프레임워크는 드라이버에 요청을 다시 배달합니다.

  • RequeueFALSE로 설정하면 요청의 소유권이 드라이버와 함께 유지됩니다. 드라이버는 하드웨어 액세스가 필요한 I/O 처리를 중지해야 합니다.

    기본 디바이스가 작동(D0) 상태로 돌아오면 프레임워크는 드라이버가 요청을 계속 처리할 수 있도록 드라이버의 IQueueCallbackIoResume::OnIoResume 콜백 함수를 호출합니다.

드라이버가 이전에 IWDFIoRequest::MarkCancelable을 호출한 경우 RequeueTRUE로 설정된 StopAcknowledge를 호출하기 전에 IWDFIoRequest::UnmarkCancelable을 호출해야 합니다.

StopAcknowledge를 호출하기 전에 드라이버의 IQueueCallbackIoStop::OnIoStop 콜백 함수는 디바이스가 저전력 상태로 들어가려고 하므로 기본 디바이스에 액세스해야 하는 I/O 요청의 모든 처리를 중지해야 합니다.

예제

다음 코드 예제는 받은 요청을 취소할 수 있는지 확인하고 IWDFIoRequest::UnmarkCancelable을 호출하는 IQueueCallbackIoStop::OnIoStop 콜백 함수입니다. IWDFIoRequest::UnmarkCancelable이 HRESULT_FROM_WIN32(ERROR_OPERATION_ABORTED)를 반환하는 경우 드라이버의 IRequestCallbackCancel::OnCancel 콜백 함수가 요청을 처리하므로 이 예제는 를 반환합니다. 그렇지 않으면 이 예제에서는 StopAcknowledge 를 호출하고 FALSE 를 지정하여 프레임워크가 결국 드라이버의 IQueueCallbackIoResume::OnIoResume 콜백 함수를 호출하도록 합니다.

void
CMyReadWriteQueue::OnIoStop(
    __in IWDFIoQueue*  pWdfQueue,
    __in IWDFIoRequest*  pWdfRequest,
    __in ULONG  ActionFlags
    )
{ HRESULT status;

    if (ActionFlags & WdfRequestStopRequestCancelable) {
        status = pWdfRequest->UnmarkCancelable();
        if (status == HRESULT_FROM_WIN32(ERROR_OPERATION_ABORTED)) {
        return;
        }
    }
    //
    // Declare an IWDFIoRequest2 interface pointer and obtain the
    // IWDFIoRequest2 interface from the IWDFIoRequest interface.
    //
    CComQIPtr<IWDFIoRequest2> r2 = pWdfRequest;

    r2->StopAcknowledge(FALSE);
}

요구 사항

요구 사항
지원 종료 UMDF 2.0 이상에서는 사용할 수 없습니다.
대상 플랫폼 데스크톱
최소 UMDF 버전 1.9
머리글 wudfddi.h(Wudfddi.h 포함)
DLL WUDFx.dll

추가 정보

IQueueCallbackIoResume::OnIoResume

IQueueCallbackIoStop::OnIoStop

IWDFIoRequest2