Freigeben über


IoSetNextIrpStackLocation-Funktion (wdm.h)

Die IoSetNextIrpStackLocation-Routine legt den IRP-Stapelspeicherort in einem vom Treiber zugewiesenen IRP auf den des Aufrufers fest.

Syntax

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

Parameter

[in, out] Irp

Zeiger auf die IRP, deren Stapelspeicherort festgelegt werden soll.

Rückgabewert

Keine

Bemerkungen

Im Allgemeinen wird diese Routine von Fahrern nur selten verwendet. Es wird in erster Linie von Treibern verwendet, die einen eigenen Stapelspeicherort in einem IRP benötigen, den sie selbst zugeordnet haben, um sie an einen anderen Treiber zu senden.

IoSetNextIrpStackLocation wird im Allgemeinen nicht benötigt, weil:

  • Der Treiber hat die IRP erhalten, die er von einem anderen Treiber auf höherer Ebene übergibt, und besitzt daher bereits einen Stapelspeicherort.
  • Oder der Treiber hat dem IRP zugeordnet, benötigt aber keinen eigenen Stapelspeicherort, da er alles, was er benötigt, in einem Kontextblock beibehalten kann, dessen Adresse an seine IoCompletion-Routine übergeben werden kann.
Wenn diese Routine aufgerufen wird, ist Vorsicht zu beachten, insbesondere bei der Zuweisung des IRP mit IoAllocateIrp oder IoMakeAssociatedIrp. Der Writer des Zuweisungstreibers muss sich daran erinnern, dass ein aufruferspezifischer Stapelspeicherort nicht in der Anzahl der Stapelspeicherorte enthalten ist, die von den Treibern auf niedrigerer Ebene benötigt werden, an die irPs mit IoCallDriver gesendet werden. Ein Treiber muss in seinem Aufruf von IoAllocateIrp oder IoMakeAssociatedIrp explizit einen Stapelspeicherort für sich selbst angeben, wenn er IoSetNextIrpStackLocation mit dem von beiden Routinen zurückgegebenen IRP aufruft.

Ein Treiber kann IoSetNextIrpStackLocation nicht mit einem IRP aufrufen, das er durch Aufrufen von IoBuildAsynchronousFsdRequest, IoBuildDeviceIoControlRequest oder IoBuildSynchronousFsdRequest ordnet.

Anforderungen

Anforderung Wert
Unterstützte Mindestversion (Client) Verfügbar ab Windows 2000.
Zielplattform Desktop
Header wdm.h (einschließlich Wdm.h, Ntddk.h, Ntifs.h)
IRQL Beliebige Ebene

Weitere Informationen

IO_STACK_LOCATION

IoAllocateIrp

IoBuildAsynchronfsdRequest

IoBuildDeviceIoControlRequest

IoBuildSynchronousFsdRequest

IoCallDriver

IoSetCompletionRoutine