Edit

Share via


IoSetNextIrpStackLocation function (wdm.h)

The IoSetNextIrpStackLocation routine sets the IRP stack ___location in a driver-allocated IRP to that of the caller.

Syntax

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

Parameters

[in, out] Irp

Pointer to the IRP whose stack ___location is to be set.

Return value

None

Remarks

In general, this routine is seldom used by drivers. It is primarily used by drivers that require their own stack ___location in an IRP that they have allocated, on their own, to send to another driver.

IoSetNextIrpStackLocation is generally not needed because either:

  • The driver received the IRP it is passing from another, higher-level driver, and so it already owns a stack ___location,
  • Or, the driver allocated the IRP but does not need its own stack ___location because it can keep everything that it needs in a context block whose address can be passed to its IoCompletion routine.
Care should be taken if this routine is called, especially when allocating the IRP with IoAllocateIrp or IoMakeAssociatedIrp. The writer of the allocating driver must remember that a caller-specific stack ___location is not included in the number of stack locations required by the lower-level drivers to which it sends IRPs with IoCallDriver. A driver must explicitly specify a stack ___location for itself in its call to IoAllocateIrp or IoMakeAssociatedIrp if it calls IoSetNextIrpStackLocation with the IRP returned by either routine.

A driver cannot call IoSetNextIrpStackLocation with any IRP it allocates by calling IoBuildAsynchronousFsdRequest, IoBuildDeviceIoControlRequest, or IoBuildSynchronousFsdRequest.

Requirements

Requirement Value
Minimum supported client Available starting with Windows 2000.
Target Platform Desktop
Header wdm.h (include Wdm.h, Ntddk.h, Ntifs.h)
IRQL Any level

See also

IO_STACK_LOCATION

IoAllocateIrp

IoBuildAsynchronousFsdRequest

IoBuildDeviceIoControlRequest

IoBuildSynchronousFsdRequest

IoCallDriver

IoSetCompletionRoutine