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