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。
如果驱动程序提供无效的对象句柄,则会发生 bug 检查。
注解
驱动程序可以调用 WdfRequestCancelSentRequest ,以尝试通过调用 WdfRequestSend 取消之前已发送到 I/O 目标的 I/O 请求。
如果请求位于 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) |
Library | 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) |