функция обратного вызова 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. Дополнительные сведения об этой функции обратного вызова см. в разделе Завершение запросов ввода-вывода.
Структура параметров завершения полностью заполнена допустимыми сведениями, только если драйвер отформатировал запрос, вызвав один из следующих вариантов:
- методы WdfIoTargetFormatXxx, например WdfIoTargetFormatRequestForRead
- методы WdfUsbTargetDeviceFormatRequestForXxx, например WdfUsbTargetDeviceFormatRequestForString
- методы WdfUsbTargetPipeFormatRequestForXxx, например WdfUsbTargetPipeFormatRequestForWrite
Если драйвер отформатирует запрос с помощью 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 |