WdfRequestCancelSentRequest 函式 (wdfrequest.h)
[適用於 KMDF 和 UMDF]
WdfRequestCancelSentRequest 方法會嘗試取消呼叫端先前提交至 I/O 目標的 I/O 要求。
語法
BOOLEAN WdfRequestCancelSentRequest(
[in] WDFREQUEST Request
);
參數
[in] Request
架構要求物件的句柄。
傳回值
如果 WdfRequestCancelSentRequest 成功將取消要求傳遞至驅動程式的 I/O 目標,則會傳回 TRUE 。 如果要求已經完成或取消,或者 I/O 目標驅動程式尚未呼叫 WdfRequestMarkCancelable 或 WdfRequestMarkCancelableEx,這個方法會傳回 FALSE。
如果驅動程式提供無效的物件句柄,就會發生錯誤檢查。
備註
驅動程式可以呼叫 WdfRequestCancelSentRequest 嘗試取消先前已傳送至 I/O 目標的 I/O 要求,方法是呼叫 WdfRequestSend。
如果要求位於 I/O 目標的佇列中,架構會取消要求。 如果架構已將要求傳遞至 I/O 目標的驅動程式,而且該驅動程式已呼叫 WdfRequestMarkCancelable 或 WdfRequestMarkCancelableEx 以啟用取消,則架構會呼叫該驅動程式的 EvtRequestCancel 回呼函式。 如果目標的驅動程式尚未呼叫 WdfRequestMarkCancelable 或 WdfRequestMarkCancelableEx,除非要求變成可取消,否則不會取消要求。
如果驅動程式已註冊要求的 CompletionRoutine 回呼函式,架構會在要求取消之後呼叫回呼函式。
一般而言,如果您的驅動程式呼叫 WdfRequestCancelSentRequest,它必須遞增要求對象的參考計數。 如需詳細資訊,請參閱 同步處理已傳送要求的取消。
如需要求取消的詳細資訊,請參閱 取消 I/O 要求。
範例
下列程式代碼範例來自 kmdf_fx2 範例驅動程式。 此範例是 EvtIoStop 回呼函式。 由於此驅動程式會將每個要求傳送至其 I/O 目標,因此如果裝置已移除, EvtIoStop 回呼函式會呼叫 WdfRequestCancelSentRequest 。
VOID
OsrFxEvtIoStop(
IN WDFQUEUE Queue,
IN WDFREQUEST Request,
IN ULONG ActionFlags
)
{
UNREFERENCED_PARAMETER(Queue);
if (ActionFlags & WdfRequestStopActionSuspend) {
WdfRequestStopAcknowledge(Request, FALSE);
} else if (ActionFlags & WdfRequestStopActionPurge) {
WdfRequestCancelSentRequest(Request);
}
return;
}
規格需求
需求 | 值 |
---|---|
目標平台 | Universal |
最小 KMDF 版本 | 1.0 |
最低UMDF版本 | 2.0 |
標頭 | wdfrequest.h (包含 Wdf.h) |
程式庫 | Wdf01000.sys (KMDF) ;WUDFx02000.dll (UMDF) |
IRQL | <=DISPATCH_LEVEL |
DDI 合規性規則 | DriverCreate (kmdf) , EvtIoStopCancel (kmdf) , EvtIoStopCompleteOrStopAck (kmdf) , InvalidReqAccess (kmdf) 、InvalidReqAccessLocal (kmdf) 、KmdfIrql (kmdf) 、KmdfIrql2 (kmdf) 、KmdfIrqlExplicit (kmdf) |