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)
Ks.lib