функция обратного вызова EVT_WDFDEVICE_WDM_IRP_DISPATCH (wdfdevice.h)
[Применимо к KMDF и UMDF]
Функция обратного вызова события драйвера EvtDeviceWdmIrpDispatch получает IRP до обработки IRP платформы.
Синтаксис
EVT_WDFDEVICE_WDM_IRP_DISPATCH EvtWdfdeviceWdmIrpDispatch;
NTSTATUS EvtWdfdeviceWdmIrpDispatch(
[in] WDFDEVICE Device,
[in] UCHAR MajorFunction,
[in] UCHAR MinorFunction,
[in] ULONG Code,
[in] WDFCONTEXT DriverContext,
[in, out] PIRP Irp,
[in] WDFCONTEXT DispatchContext
)
{...}
Параметры
[in] Device
Дескриптор объекта устройства платформы.
[in] MajorFunction
Один из основных кодов функций IRP, определенных в wdm.h.
[in] MinorFunction
Один из дополнительных кодов функций IRP ввода-вывода, определенных в wdm.h для кода MajorFunction.
[in] Code
Указывает значение кода элемента управления ввода-вывода. Этот параметр действителен, только если MajorFunction задано значение IRP_MJ_DEVICE_CONTROL.
[in] DriverContext
Нетипизированный указатель на определяемые драйвером контекстные сведения, предоставляемые драйвером при вызове WdfDeviceConfigureWdmIrpDispatchCallback.
[in, out] Irp
Указатель на структуру IRP.
[in] DispatchContext
Нетипизированный указатель на сведения о контексте отправки платформы. Драйвер должен предоставить этот параметр при вызове WdfDeviceWdmDispatchIrp.
Возвращаемое значение
Функция обратного вызова EvtDeviceWdmIrpDispatch должна:
- Возвращает значение, которое возвращает метод WdfDeviceWdmDispatchIrp , если функция обратного вызова вызывает этот метод.
- Возвращает значение, возвращаемое методом WdfDeviceWdmDispatchIrpToIoQueue, если функция обратного вызова вызывает этот метод.
- KMDF только Задайте для члена IRP IoStatus.Status значение STATUS_SUCCESS или другое значение состояния, для которого NT_SUCCESS(состояние) равно TRUE, и возвращает то же значение (после вызова IoCompleteRequest), если функция обратного вызова успешно завершает полученную IRP.
- KMDF толькоЗадайте IoStatus.Status член IRP значением состояния, для которого NT_SUCCESS(состояние) равно FALSE, и возвращает то же значение (после вызова IoCompleteRequest), если функция обратного вызова обнаруживает ошибку.
- KMDF толькоВозвращает STATUS_PENDING, если функция обратного вызова вызывает IoMarkIrpPending.
Замечания
Функцию обратного вызова EvtDeviceWdmIrpDispatch следует использовать только для выбора определенной очереди для IRP. Для этого драйвер вызывает метод WdfDeviceWdmDispatchIrpToIoQueue из функции обратного вызова.
Если после проверки IRP в этой функции обратного вызова драйвер не знает, как отправить IRP, драйвер может вызвать WdfDeviceWdmDispatchIrp, чтобы вернуть IRP в платформу для обработки по умолчанию.
Драйвер UMDF должен вызывать WdfDeviceWdmDispatchIrp или WdfDeviceWdmDispatchIrpToIoQueue из этой функции обратного вызова. Драйвер KMDF имеет дополнительный вариант вызова, а вместо этого завершает IRP или помечает его ожидающим.
Чтобы зарегистрировать функцию обратного вызова EvtDeviceWdmIrpDispatch, драйвер должен вызвать WdfDeviceConfigureWdmIrpDispatchCallback.
В функции обратного вызова EvtDeviceWdmIrpDispatch драйвер не должен задавать подпрограмму завершения. Если требуется подпрограмма завершения, драйвер KMDF может предоставить функцию обратного вызова EvtDeviceWdmIrpPreprocess вместо EvtDeviceWdmIrpDispatch.
Дополнительные сведения об указании очередей для ip-адресов по мере их поступления см. в отправке запросов irPs в очереди ввода-вывода.
Требования
Требование | Ценность |
---|---|
целевая платформа | Всеобщий |
минимальная версия KMDF | 1.11 |
минимальная версия UMDF | 2.17 |
заголовка | wdfdevice.h (include Wdf.h) |
IRQL | <=DISPATCH_LEVEL |