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