WdfRequestCancelSentRequest 함수(wdfrequest.h)
[KMDF 및 UMDF에 적용]
WdfRequestCancelSentRequest 메서드는 호출자가 이전에 I/O 대상에 제출한 I/O 요청을 취소하려고 시도합니다.
구문
BOOLEAN WdfRequestCancelSentRequest(
[in] WDFREQUEST Request
);
매개 변수
[in] Request
프레임워크 요청 개체에 대한 핸들입니다.
반환 값
WdfRequestCancelSentRequest 는 드라이버의 I/O 대상에 취소 요청을 성공적으로 전달하면 TRUE 를 반환합니다. 이 메서드는 요청이 이미 완료되었거나 취소되었거나 I/O 대상 드라이버가 WdfRequestMarkCancelable 또는 WdfRequestMarkCancelableEx를 호출하지 않은 경우 FALSE를 반환합니다.
드라이버가 잘못된 개체 핸들을 제공하는 경우 버그 검사 발생합니다.
설명
드라이버는 WdfRequestCancelSentRequest 를 호출하여 WdfRequestSend를 호출하여 이전에 I/O 대상으로 보낸 I/O 요청을 취소하려고 시도할 수 있습니다.
요청이 I/O 대상의 큐에 있는 경우 프레임워크는 요청을 취소합니다. 프레임워크가 이미 I/O 대상의 드라이버에 요청을 전달하고 해당 드라이버가 취소를 사용하도록 설정하기 위해 WdfRequestMarkCancelable 또는 WdfRequestMarkCancelableEx 를 호출한 경우 프레임워크는 해당 드라이버의 EvtRequestCancel 콜백 함수를 호출합니다. 대상의 드라이버가 WdfRequestMarkCancelable 또는 WdfRequestMarkCancelableEx를 호출하지 않은 경우 요청을 취소할 수 없는 한 요청이 취소되지 않습니다.
드라이버가 요청에 대해 CompletionRoutine 콜백 함수를 등록한 경우 프레임워크는 요청이 취소된 후 콜백 함수를 호출합니다.
일반적으로 드라이버 가 WdfRequestCancelSentRequest를 호출하는 경우 요청 개체의 참조 수를 증가시켜야 합니다. 자세한 내용은 보낸 요청 취소 동기화를 참조하세요.
요청 취소에 대한 자세한 내용은 I/O 요청 취소를 참조하세요.
예제
다음 코드 예제는 kmdf_fx2 샘플 드라이버에서 가져옵니다. 이 예제는 EvtIoStop 콜백 함수입니다. 이 드라이버는 각 요청을 I/O 대상으로 보내기 때문에 디바이스가 제거된 경우 EvtIoStop 콜백 함수는 WdfRequestCancelSentRequest 를 호출합니다.
VOID
OsrFxEvtIoStop(
IN WDFQUEUE Queue,
IN WDFREQUEST Request,
IN ULONG ActionFlags
)
{
UNREFERENCED_PARAMETER(Queue);
if (ActionFlags & WdfRequestStopActionSuspend) {
WdfRequestStopAcknowledge(Request, FALSE);
} else if (ActionFlags & WdfRequestStopActionPurge) {
WdfRequestCancelSentRequest(Request);
}
return;
}
요구 사항
요구 사항 | 값 |
---|---|
대상 플랫폼 | 유니버설 |
최소 KMDF 버전 | 1.0 |
최소 UMDF 버전 | 2.0 |
머리글 | wdfrequest.h(Wdf.h 포함) |
라이브러리 | Wdf01000.sys(KMDF); WUDFx02000.dll(UMDF) |
IRQL | <=DISPATCH_LEVEL |
DDI 규정 준수 규칙 | DriverCreate(kmdf), EvtIoStopCancel(kmdf), EvtIoStopCompleteOrStopAck(kmdf), InvalidReqAccess(kmdf), InvalidReqAccessLocal(kmdf), KmdfIrql(kmdf), KmdfIrql2(kmdf), KmdfIrqlExplicit(kmdf) |