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 请求

仅当驱动程序通过调用下列方法之一格式化请求时,完成参数结构才会完全填充有效信息:

如果驱动程序使用 WdfRequestFormatRequestUsingCurrentTypeWdfRequestWdmFormatUsingStackLocation格式化请求,则完成参数结构中只有 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

另请参阅

WDF_REQUEST_COMPLETION_PARAMS

WdfRequestSetCompletionRoutine