Функция KsForwardAndCatchIrp (ks.h)

Функция KsForwardAndCatchIrp пересылает IRP указанному драйверу после инициализации следующего расположения стека и восстанавливает контроль над IRP по завершении от этого драйвера. Функция используется с устройствами, которые могут быть сложены и не используют файловые объекты для обмена данными.

Если используется файловый объект, вызывающий объект должен инициализировать текущее расположение стека с помощью этого объекта файла перед вызовом функции KsForwardAndCatchIrp . Функция проверяет, есть ли новое расположение стека для копирования, прежде чем пытаться сделать это. Если новое расположение стека отсутствует, функция возвращает STATUS_INVALID_DEVICE_REQUEST. Независимо от того, присутствует ли новое расположение стека, IRP не завершается.

Синтаксис

KSDDKAPI NTSTATUS KsForwardAndCatchIrp(
  [in] PDEVICE_OBJECT DeviceObject,
  [in] PIRP           Irp,
  [in] PFILE_OBJECT   FileObject,
  [in] KSSTACK_USE    StackUse
);

Параметры

[in] DeviceObject

Указывает устройство для пересылки IRP.

[in] Irp

Указывает IRP, пересылаемый указанному драйверу.

[in] FileObject

Задает значение объекта файла для копирования в следующее расположение стека. Это значение может иметь значение NULL , чтобы не задать объект file, но значение всегда копируется в следующее расположение стека. Если текущий объект файла должен быть сохранен, его необходимо передать в этом параметре.

[in] StackUse

Задает значение, перечисляемое KSSTACK_USE. Если значение равно KsStackCopyToNewLocation, параметры копируются в следующее расположение стека. Если значение равно KsStackReuseCurrentLocation, текущее расположение стека повторно используется при переадресации IRP и возврате расположения стека в текущее расположение. Если значение равно KsStackUseNewLocation, новое расположение стека используется как есть.

Возвращаемое значение

Функция KsForwardAndCatchIrp возвращает результат IoCallDriver или возвращает недопустимое состояние, если больше нет доступной глубины стека.

Комментарии

Перечисление типа KSSTACK_USE указывает, как используется стек IRP при пересылке IRP следующему драйверу.

Перечисление Описание
KsStackCopyToNewLocation Указывает, что параметры должны быть скопированы в следующее расположение стека.
KsStackReuseCurrentLocation Указывает, что текущее расположение стека будет использоваться повторно.
KsStackUseNewLocation Указывает, что следующее расположение стека будет использоваться без изменений.

Требования

Требование Значение
Целевая платформа Универсальное
Верхняя часть ks.h (включая Ks.h)
Библиотека Ks.lib