Поделиться через


функция обратного вызова EVT_WDF_REQUEST_COMPLETION_ROUTINE (wdfrequest.h)

[Применимо к KMDF и UMDF]

Функция обратного вызова событий драйвера CompleteRoutine выполняется, когда другой драйвер завершает указанный запрос ввода-вывода.

Синтаксис

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

Дескриптор объекта запроса платформы, представляющий завершенный запрос ввода-вывода.

[in] Target

Дескриптор целевого объекта ввода-вывода, представляющий целевой объект ввода-вывода, который завершил запрос.

[in] Params

Указатель на структуру WDF_REQUEST_COMPLETION_PARAMS, содержащую сведения о завершенном запросе. См. примечание ниже относительно допустимости параметров завершения.

[in] Context

Сведения о контексте, предоставленном драйвером, указанным в предыдущем вызове WdfRequestSetCompletionRoutine.

Возвращаемое значение

Никакой

Замечания

Чтобы зарегистрировать функцию обратного вызова CompletionRoutine для запроса ввода-вывода, драйвер должен вызвать WdfRequestSetCompletionRoutine. Дополнительные сведения об этой функции обратного вызова см. в разделе Завершение запросов ввода-вывода.

Структура параметров завершения полностью заполнена допустимыми сведениями, только если драйвер отформатировал запрос, вызвав один из следующих вариантов:

Если драйвер отформатирует запрос с помощью WdfRequestFormatRequestUsingCurrentType или WdfRequestWdmFormatUsingStackLocation, допустимо только поле IoStatus в структуре параметров завершения.

Драйвер KMDF CompletionRoutine может выполняться в IRQL <= DISPATCH_LEVEL независимо от ExecutionLevel, указанной в структуре WDF_OBJECT_ATTRIBUTES для объекта запроса ввода-вывода.

Примеры

Тип функции объявлен в 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