EVT_WDF_REQUEST_COMPLETION_ROUTINE回调函数 (wdfrequest.h)
[适用于 KMDF 和 UMDF]
当另一个驱动程序完成指定的 I/O 请求时,将执行驱动程序的 CompletionRoutine 事件回调函数。
语法
EVT_WDF_REQUEST_COMPLETION_ROUTINE EvtWdfRequestCompletionRoutine;
void EvtWdfRequestCompletionRoutine(
[in] WDFREQUEST Request,
[in] WDFIOTARGET Target,
[in] PWDF_REQUEST_COMPLETION_PARAMS Params,
[in] WDFCONTEXT Context
)
{...}
参数
[in] Request
表示已完成的 I/O 请求的框架请求对象的句柄。
[in] Target
I/O 目标对象的句柄,该对象表示完成请求的 I/O 目标。
[in] Params
指向包含已完成请求相关信息 的WDF_REQUEST_COMPLETION_PARAMS 结构的指针。 有关完成参数的有效性,请参阅下面的说明。
[in] Context
驱动程序提供的上下文信息,驱动程序在对 WdfRequestSetCompletionRoutine 的先前调用中指定的上下文信息。
返回值
无
备注
若要为 I/O 请求注册 CompletionRoutine 回调函数,驱动程序必须调用 WdfRequestSetCompletionRoutine。 有关此回调函数的详细信息,请参阅 完成 I/O 请求。
仅当驱动程序通过调用以下其中一个来格式化请求时,完成参数结构才使用有效信息进行完全填充:
- WdfIoTargetFormatXxx 方法,例如 WdfIoTargetFormatRequestForRead
- WdfUsbTargetDeviceFormatRequestForXxx 方法,例如 WdfUsbTargetDeviceFormatRequestForString
- WdfUsbTargetPipeFormatRequestForXxx 方法,例如 WdfUsbTargetPipeFormatRequestForWrite
如果驱动程序使用 WdfRequestFormatRequestUsingCurrentType 或 WdfRequestWdmFormatUsingStackLocation 格式化请求,则只有完成参数结构中的 IoStatus 字段有效。
KMDF 驱动程序的 CompletionRoutine 可以在 IRQL <= DISPATCH_LEVEL运行,而不考虑在 I/O 请求对象的WDF_OBJECT_ATTRIBUTES结构中指定的 ExecutionLevel。
示例
函数类型在 Wdfrequest.h 中声明,如下所示。
typedef VOID
(EVT_WDF_REQUEST_COMPLETION_ROUTINE)(
IN WDFREQUEST Request,
IN WDFIOTARGET Target,
IN PWDF_REQUEST_COMPLETION_PARAMS Params,
IN WDFCONTEXT Context
);
若要定义名为 MyCompletionRoutine 的 CompletionRoutine 回调函数,必须先提供 SDV 和其他验证工具所需的函数声明,如下所示:
EVT_WDF_REQUEST_COMPLETION_ROUTINE MyCompletionRoutine;
然后,按如下所示实现回调函数:
VOID
MyCompletionRoutine (
IN WDFREQUEST Request,
IN WDFIOTARGET Target,
IN PWDF_REQUEST_COMPLETION_PARAMS Params,
IN WDFCONTEXT Context
)
{...}
要求
要求 | 值 |
---|---|
目标平台 | 通用 |
最低 KMDF 版本 | 1.0 |
最低 UMDF 版本 | 2.0 |
标头 | wdfrequest.h (包括 Wdf.h) |
IRQL | <=DISPATCH_LEVEL |