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