IoSetNextIrpStackLocation 函数 (wdm.h)

IoSetNextIrpStackLocation 例程将驱动程序分配的 IRP 中的 IRP 堆栈位置设置为调用方的位置。

语法

void IoSetNextIrpStackLocation(
  [in, out] PIRP Irp
);

参数

[in, out] Irp

指向要设置其堆栈位置的 IRP 的指针。

返回值

备注

通常,驱动程序很少使用此例程。 它主要由驱动程序使用,这些驱动程序需要在自己分配的 IRP 中自己的堆栈位置以发送到另一个驱动程序。

通常不需要 IoSetNextIrpStackLocation,因为:

  • 驱动程序收到它从另一个更高级别的驱动程序传递的 IRP,因此它已拥有堆栈位置,
  • 或者,驱动程序分配了 IRP,但不需要自己的堆栈位置,因为它可以将所需的一切保存在一个上下文块中,该上下文块的地址可以传递给其 IoCompletion 例程。
如果调用此例程,应格外小心,尤其是在使用 IoAllocateIrpIoMakeAssociatedIrp 分配 IRP 时。 分配驱动程序的编写者必须记住,调用方特定的堆栈位置不包括在它使用 IoCallDriver 向其发送 IRP 的较低级别驱动程序所需的堆栈位置数中。 如果驱动程序使用任一例程返回的 IRP 调用 IoSetNextIrpStackLocation,则必须在调用 IoAllocateIrpIoMakeAssociatedIrp 时为其自身显式指定堆栈位置。

驱动程序无法通过调用 IoBuildAsynchronousFsdRequestIoBuildDeviceIoControlRequestIoBuildSynchronousFsdRequest 分配的任何 IRP 调用 IoSetNextIrpStackLocation

要求

要求
最低受支持的客户端 从 Windows 2000 开始可用。
目标平台 桌面
标头 wdm.h(包括 Wdm.h、Ntddk.h、Ntifs.h)
IRQL 任何级别

另请参阅

IO_STACK_LOCATION

IoAllocateIrp

IoBuildAsynchronousFsdRequest

IoBuildDeviceIoControlRequest

IoBuildSynchronousFsdRequest

IoCallDriver

IoSetCompletionRoutine