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
    );

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