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


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

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

Функция обратного вызова события 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

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

[in] Target

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

[in] Params

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

[in] Context

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

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

None

Remarks

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

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

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

Свойство CompletionRoutine драйвера KMDF может выполняться по адресу 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