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

IQueueCallbackRead::OnRead

IQueueCallbackWrite::OnWrite

IRequestCallbackCancel

IRequestCallbackCancel::OnCancel

IWDFIoRequest

IWDFIoRequest::Complete

IWDFIoRequest::ForwardToIoQueue

IWDFIoRequest::UnmarkCancelable