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 目標的驅動程式,而且該驅動程式已呼叫 WdfRequestMarkCancelableWdfRequestMarkCancelableEx 以啟用取消,則架構會呼叫該驅動程式的 EvtRequestCancel 回呼函式。 如果目標的驅動程式尚未呼叫 WdfRequestMarkCancelableWdfRequestMarkCancelableEx,除非要求變成可取消,否則不會取消要求。

如果驅動程式已註冊要求的 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)

另請參閱

CompletionRoutine

EvtRequestCancel

WdfRequestMarkCancelable

WdfRequestMarkCancelableEx

WdfRequestSend