функция обратного вызова EVT_WDFDEVICE_WDM_IRP_PREPROCESS (wdfdevice.h)
[Применимо только к KMDF]
Функция обратного вызова событий драйвера EvtDeviceWdmIrpPreprocess получает IRP до обработки IRP платформы.
Синтаксис
EVT_WDFDEVICE_WDM_IRP_PREPROCESS EvtWdfdeviceWdmIrpPreprocess;
NTSTATUS EvtWdfdeviceWdmIrpPreprocess(
[in] WDFDEVICE Device,
[in, out] PIRP Irp
)
{...}
Параметры
[in] Device
Дескриптор объекта устройства платформы.
[in, out] Irp
Указатель на структуру IRP.
Возвращаемое значение
Функция обратного вызова EvtDeviceWdmIrpPreprocess должна:
- Задайте для члена IRP IoStatus.Status значение STATUS_SUCCESS или другое значение состояния, для которого NT_SUCCESS(состояние) равно TRUE, и верните то же значение (после вызова IoCompleteRequest), если функция обратного вызова успешно завершает полученную IRP.
- Присвойте элементу IoStatus.Status IRP значение состояния, для которого NT_SUCCESS(состояние) равно FALSEи возвращает то же значение (после вызова IoCompleteRequest), если функция обратного вызова обнаруживает ошибку.
- Возвращает STATUS_PENDING, если функция обратного вызова вызывает IoMarkIrpPending.
- Возвращает значение, которое возвращает метод WdfDeviceWdmDispatchPreprocessedIrp, если функция обратного вызова вызывает этот метод.
Замечания
Чтобы зарегистрировать функцию обратного вызова EvtDeviceWdmIrpPreprocess, драйвер должен вызвать WdfDeviceInitAssignmIrpPreprocessCallback.
Драйвер может использовать функцию обратного вызова EvtDeviceWdmIrpPreprocess для выполнения любого из следующих действий.
- Обработайте IRP, который платформа не поддерживает, следуя правилам WDM для обработкиirPs.
- Предварительная обработка IRP перед обработкой платформы.
- Задайте подпрограмму завершения, чтобы драйвер может после обработки IRP после обработки платформы.
Если вы хотите, чтобы платформа впоследствии обрабатывала функцию IRP, так как это было бы, если функция обратного вызова EvtDeviceWdmIrpPre process не была вызвана, функция обратного вызова должна вызывать WdfDeviceWdmDispatchPreprocessedIrp, чтобы вернуть IRP в платформу.
Если драйвер регистрирует функцию обратного вызова EvtDeviceWdmIrpPreprocess, платформа добавляет дополнительное расположение стека ввода-вывода в irPs, которые функция обратного вызова получает. Дополнительное расположение стека ввода-вывода позволяет функции обратного вызова задать подпрограмму IoCompletion перед вызовом WdfDeviceWdmDispatchPreprocessedIrp.
Функция обратного вызова EvtDeviceWdmIrpPreprocess вызывается в IRQL вызываемого потока. IRQL определяется типом IRP, который платформа передает EvtDeviceWdmIrpPreprocess. Например, если диспетчер PnP отправляет IRP_MN_QUERY_DEVICE_RELATIONS в IRQL = PASSIVE_LEVEL, платформа вызывает EvtDeviceWdmIrpPreprocess в IRQL = PASSIVE_LEVEL.
Требования
Требование | Ценность |
---|---|
целевая платформа | Всеобщий |
минимальная версия KMDF | 1.0 |
заголовка | wdfdevice.h (include Wdf.h) |
IRQL | <=DISPATCH_LEVEL |