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::OnRead、IQueueCallbackWrite::OnWrite或 IQueueCallbackDeviceIoControl::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
IRequestCallbackCancel::OnCancel