Функция 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 |