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


Функция 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, чтобы не задать объект файла, но значение всегда копируется в следующее расположение стека. Если текущий объект файла должен быть сохранен, его необходимо передать в этом параметре.

[in] StackUse

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

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

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

Замечания

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

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

Требования

Требование Ценность
целевая платформа Всеобщий
заголовка ks.h (include Ks.h)
библиотеки Ks.lib