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 |