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 |