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를 호출해야 합니다.
드라이버가 IQueueCallbackIoStop::OnIoStop 콜백 함수가 수신하는 모든 요청에 대해 IWDFIoRequest::Complete 또는 StopAcknowledge를 호출하지 않는 경우 프레임워크는 디바이스가 작동(D0) 상태를 벗어나도록 허용하지 않습니다. 이 동작이 실행되지 않으면 시스템이 최대 절전 모드 상태 또는 다른 낮은 시스템 전원 상태로 전환되지 않도록 방지할 수 있습니다.
드라이버의 IQueueCallbackIoStop::OnIoStop 콜백 함수가 StopAcknowledge를 호출하는 경우 Requeue 매개 변수를 TRUE 또는 FALSE로 설정할 수 있습니다.
-
Requeue를 TRUE로 설정하면 프레임워크가 요청을 해당 I/O 큐에 다시 배치합니다.
기본 디바이스가 작동(D0) 상태로 돌아오면 프레임워크는 드라이버에 요청을 다시 배달합니다.
-
Requeue를 FALSE로 설정하면 요청의 소유권이 드라이버와 함께 유지됩니다. 드라이버는 하드웨어 액세스가 필요한 I/O 처리를 중지해야 합니다.
기본 디바이스가 작동(D0) 상태로 돌아오면 프레임워크는 드라이버가 요청을 계속 처리할 수 있도록 드라이버의 IQueueCallbackIoResume::OnIoResume 콜백 함수를 호출합니다.
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