IWDFIoRequest::MarkCancelable 메서드(wudfddi.h)
[경고: UMDF 2는 UMDF의 최신 버전이며 UMDF 1을 대체합니다. 모든 새 UMDF 드라이버는 UMDF 2를 사용하여 작성해야 합니다. UMDF 1에 새 기능이 추가되지 않으며 최신 버전의 Windows 10 UMDF 1에 대한 지원이 제한되어 있습니다. 유니버설 Windows 드라이버는 UMDF 2를 사용해야 합니다. 자세한 내용은 UMDF를 사용하여 시작 참조하세요.]
MarkCancelable 메서드를 사용하면 I/O 요청을 취소할 수 있습니다.
구문
void MarkCancelable(
[in] IRequestCallbackCancel *pCancelCallback
);
매개 변수
[in] pCancelCallback
I/O 요청이 취소된 후 프레임워크가 호출하는 메서드가 있는 IRequestCallbackCancel 인터페이스에 대한 포인터입니다.
반환 값
없음
설명
드라이버가 IQueueCallbackRead::OnRead, IQueueCallbackWrite::OnWrite 또는 IQueueCallbackDeviceIoControl::OnDeviceIoControl 이벤트 콜백 함수에 대한 입력으로 I/O 요청을 수신한 후 드라이버는 MarkCancelable 메서드를 호출하여 요청을 취소할 수 있습니다. 나중에 드라이버는 IWDFIoRequest::UnmarkCancelable 메서드를 호출하여 요청 취소를 사용하지 않도록 설정할 수 있습니다.
드라이버가 MarkCancelable을 호출하기 전에 드라이버는 IRequestCallbackCancel::OnCancel 메서드를 구현해야 합니다.
UMDF(사용자 모드 드라이버 프레임워크)는 큐당 하나의 IRequestCallbackCancel::OnCancel 메서드만 허용합니다. 따라서 드라이버가 특정 큐와 연결된 요청에 대해 MarkCancelable 을 호출하여 프레임워크가 해당 요청을 취소할 수 있도록 하는 경우 드라이버는 동일한 요청 콜백 개체에 대한 IRequestCallbackCancel 인터페이스에 대한 포인터를 전달해야 합니다. 나중에 각 요청을 취소하기 위해 프레임워크는 이 요청 콜백 개체의 IRequestCallbackCancel::OnCancel 메서드에 대한 호출에서 요청에 대한 IWDFIoRequest 인터페이스에 대한 포인터를 전달합니다.
드라이버는 IRequestCallbackCancel::OnCancel 메서드 또는 일반 I/O 완료 경로에서 IWDFIoRequest::Complete를 호출해야 합니다.
드라이버가 MarkCancelable 을 호출하여 취소를 사용하도록 설정한 후에는 드라이버가 UnmarkCancelable 을 호출하여 취소를 사용하지 않도록 설정하지 않는 한 드라이버가 요청 개체를 소유하고 있는 동안 요청을 취소할 수 있습니다.
드라이버가 IWDFIoRequest::ForwardToIoQueue 메서드를 호출하여 요청을 다른 큐로 전달하는 경우 다음 규칙이 적용됩니다.
-
드라이버가 요청을 다른 큐로 전달할 때 I/O 요청 취소를 사용하도록 설정할 수 없습니다.
일반적으로 드라이버는 IWDFIoRequest::ForwardToIoQueue를 호출하기 전에 요청을 취소할 수 있도록 MarkCancelable을 호출해서는 안 됩니다. 또는 드라이버에서 요청을 취소할 수 있습니다. 그러나 드라이버는 IWDFIoRequest::ForwardToIoQueue를 호출하기 전에 요청 취소를 사용하지 않도록 설정하려면 UnmarkCancelable을 호출해야 합니다.
- 요청이 두 번째 큐에 있는 동안 프레임워크는 요청을 소유하고 드라이버에 알리지 않고 취소할 수 있습니다.
- 프레임워크가 두 번째 큐에서 요청을 큐에서 제거하고 드라이버에 요청을 전달한 후 드라이버는 MarkCancelable 을 호출하여 취소를 사용하도록 설정할 수 있습니다.
예제
다음 코드 예제에서는 프레임워크에서 취소할 수 있도록 요청을 설정합니다.
//
// The QueryInteraface should not fail.
//
(VOID)this->QueryInterface(_uuidof(IRequestCallbackCancel),
(PVOID *)&cancelCallback);
pWdfRequest->MarkCancelable(cancelCallback);
요구 사항
요구 사항 | 값 |
---|---|
지원 종료 | UMDF 2.0 이상에서는 사용할 수 없습니다. |
대상 플랫폼 | 데스크톱 |
최소 UMDF 버전 | 1.5 |
머리글 | wudfddi.h(Wudfddi.h 포함) |
DLL | WUDFx.dll |
추가 정보
IQueueCallbackDeviceIoControl::OnDeviceIoControl
IRequestCallbackCancel::OnCancel