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


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

См. также

WdfDeviceConfigureWdmIrpDispatchCallback

WdfDeviceWdmDispatchIrp

WdfDeviceWdmDispatchIrpToIoQueue