IWDFIoRequest::MarkCancelable 方法 (wudfddi.h)

[警告: UMDF 2 是最新版的 UMDF,並取代 UMDF 1。 所有新的 UMDF 驅動程式都應該使用 UMDF 2 來撰寫。 未將新功能新增至 UMDF 1,且較新版本的 #D75634B19CE5149449F93150EE2C3672D 上不支援 UMDF 1。 通用 Windows 驅動程式必須使用 UMDF 2。 如需詳細資訊,請參閱使用 UMDF 使用者入門。]

MarkCancelable 方法會啟用取消 I/O 要求。

語法

void MarkCancelable(
  [in] IRequestCallbackCancel *pCancelCallback
);

參數

[in] pCancelCallback

IRequestCallbackCancel 介面的指標,其架構在 I/O 要求取消之後呼叫的方法。

傳回值

備註

在驅動程式收到 IQueueCallbackRead::OnReadIQueueCallbackWrite::OnWrite 或IQueueCallbackDeviceIoControl::OnDeviceIoControl::OnDeviceIoControl 事件回呼函式的輸入之後,驅動程式就可以呼叫 MarkCancelable 方法來啟用要求取消。 稍後,驅動程式可以呼叫 IWDFIoRequest::UnmarkCancelable 方法來停用取消要求。

在驅動程式呼叫 MarkCancelable 之前,驅動程式必須實作 IRequestCallbackCancel::OnCancel 方法。

使用者模式驅動程序架構 (UMDF) 每個佇列只允許一個 IRequestCallbackCancel::OnCancel 方法。 因此,當驅動程式針對與特定佇列相關聯的要求呼叫 MarkCancelable 以讓架構取消這些要求時,驅動程式必須針對相同的要求回呼物件將指標傳遞至 IRequestCallbackCancel 介面。 之後,若要取消每個要求,架構會在呼叫此 request-callback 物件的 IRequestCallbackCancel::OnCancel 方法時,將指標傳遞至 IWDFIoRequest 介面。

驅動程式必須從 IRequestCallbackCancel::OnCancel 方法或其一般 I/O 完成路徑呼叫 IWDFIoRequest::Complete

在驅動程式呼叫 MarkCancelable 以啟用取消之後,除非驅動程式呼叫 UnmarkCancelable 以停用取消,否則該要求仍可取消。

如果驅動程式呼叫 IWDFIoRequest::ForwardToIoQueue 方法,將要求轉送至不同的佇列,則適用下列規則:

  • 當驅動程式將要求轉送至不同的佇列時,無法啟用取消 I/O 要求。

    一般而言,驅動程式不應該呼叫 MarkCancelable 以在呼叫 IWDFIoRequest::ForwardToIoQueue 之前啟用取消要求。 或者,驅動程式可以取消要求。 不過,驅動程式必須接著呼叫 UnmarkCancelable ,才能在呼叫 IWDFIoRequest::ForwardToIoQueue 之前先停用取消要求。

  • 當要求位於第二個佇列中時,架構會擁有它,而且可以在不通知驅動程序的情況下取消它。
  • 在架構從第二個佇列取消佇列要求並將要求傳遞給驅動程序之後,驅動程式可以呼叫 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