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 (包括 Ks.h)
Library Ks.lib