WdfRequestCancelSentRequest 函式 (wdfrequest.h)
[適用於 KMDF 和 UMDF]
WdfRequestCancelSentRequest 方法會嘗試取消呼叫端先前提交至 I/O 目標的 I/O 要求。
語法
BOOLEAN WdfRequestCancelSentRequest(
[in] WDFREQUEST Request
);
參數
[in] Request
架構要求物件的句柄。
傳回值
WdfRequestCancelSentRequest 如果成功將取消要求傳遞至驅動程式的 I/O 目標,則會傳回 true 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;
}
要求
要求 | 價值 |
---|---|
目標平臺 | 普遍 |
最低 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) |