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


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

См. также раздел

WdfDeviceConfigureWdmIrpDispatchCallback

WdfDeviceWdmDispatchIrp

WdfDeviceWdmDispatchIrpToIoQueue