共用方式為


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

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

傳回值

沒有

言論

當驅動程式收到 I/O 要求做為輸入至 IQueueCallbackRead::OnReadIQueueCallbackWrite::OnWriteIQueueCallbackDeviceIoControl::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