共用方式為


WdfRequestCancelSentRequest 函式 (wdfrequest.h)

[適用於 KMDF 和 UMDF]

WdfRequestCancelSentRequest 方法會嘗試取消呼叫端先前提交至 I/O 目標的 I/O 要求。

語法

BOOLEAN WdfRequestCancelSentRequest(
  [in] WDFREQUEST Request
);

參數

[in] Request

架構要求物件的句柄。

傳回值

WdfRequestCancelSentRequest 如果成功將取消要求傳遞至驅動程式的 I/O 目標,則會傳回 true true。 如果要求已經完成或取消,或 I/O 目標驅動程式尚未呼叫 WdfRequestMarkCancelableWdfRequestMarkCancelableEx,則此方法 會傳回 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;
}

要求

要求 價值
目標平臺 普遍
最低 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