функция обратного вызова 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
Один из дополнительных кодов функций I/O 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 Задайте для элемента IoStatus.Status IRP значение STATUS_SUCCESS или другое значение состояния, для которого NT_SUCCESS(status) равно TRUE, и верните то же значение (после вызова IoCompleteRequest), если функция обратного вызова успешно завершает полученную функцию IRP.
- Только KMDFЗадайте для элемента IoStatus.Status IRP значение состояния, для которого NT_SUCCESS(status) равно FALSE, и верните то же значение (после вызова IoCompleteRequest), если функция обратного вызова обнаруживает ошибку.
- Только KMDFВозвращает STATUS_PENDING, если функция обратного вызова вызывает IoMarkIrpPending.
Комментарии
Функция обратного вызова EvtDeviceWdmIrpDispatch должна использоваться только для выбора конкретной очереди для IRP. Для этого драйвер вызывает метод WdfDeviceWdmDispatchIrpToIoQueue из функции обратного вызова.
Если после проверки IRP в этой функции обратного вызова драйвер не знает, как отправить IRP, драйвер может вызвать WdfDeviceWdmDispatchIrp , чтобы вернуть IRP в платформу для обработки по умолчанию.
Драйвер UMDF должен вызывать WdfDeviceWdmDispatchIrp или WdfDeviceWdmDispatchIrpToIoQueue из этой функции обратного вызова. Драйвер KMDF имеет дополнительную возможность ни вызова, ни вызова, и вместо этого завершить IRP или пометить его ожидание.
Чтобы зарегистрировать функцию обратного вызова EvtDeviceWdmIrpDispatch , драйвер должен вызвать WdfDeviceConfigureWdmIrpDispatchCallback.
В функции обратного вызова EvtDeviceWdmIrpDispatch драйвер не должен задавать подпрограмму завершения. Если требуется подпрограмма завершения, драйвер KMDF может предоставить функцию обратного вызова EvtDeviceWdmIrpPreprocess вместо EvtDeviceWdmIrpDispatch.
Дополнительные сведения об указании очередей для поставщиков irP по мере их поступления см. в разделе Отправка irPs в очереди ввода-вывода.
Требования
Требование | Значение |
---|---|
Целевая платформа | Универсальное |
Минимальная версия KMDF | 1.11 |
Минимальная версия UMDF | 2.17 |
Верхняя часть | wdfdevice.h (включая Wdf.h) |
IRQL | <=DISPATCH_LEVEL |