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
);
若要定义 CompletionRoutine 回调函数,该函数名为 MyCompletionRoutine,必须先提供 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 |