Freigeben über


IoSkipCurrentIrpStackLocation-Funktion (wdm.h)

Mit dem IoSkipCurrentIrpStackLocation- Makro wird der IO_STACK_LOCATION Arrayzeiger des Systems geändert, sodass dieser Treiber, wenn der aktuelle Treiber den nächsten niedrigeren Treiber aufruft, dieselbe IO_STACK_LOCATION Struktur empfängt, die der aktuelle Treiber empfangen hat.

Syntax

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

Parameter

[in, out] Irp

Ein Zeiger auf das IRP.

Rückgabewert

Nichts

Bemerkungen

Wenn Ihr Treiber ein IRP an den nächsten niedrigeren Treiber sendet, kann Ihr Treiber IoSkipCurrentIrpStackLocation- aufrufen, wenn Sie keine IoCompletion- Routine bereitstellen möchten (die Adresse, die in der IO_STACK_LOCATION Struktur des Treibers gespeichert ist). Wenn Sie IoSkipCurrentIrpStackLocation aufrufen, bevor Sie IoCallDriver-aufrufen, erhält der nächstniedrige Treiber die gleiche IO_STACK_LOCATION, die Ihr Treiber empfangen hat.

Wenn Sie beabsichtigen, eine IoCompletion- Routine für das IRP bereitzustellen, sollte Ihr Treiber IoCopyCurrentIrpStackLocationToNext anstelle von IoSkipCurrentIrpStackLocationaufrufen. Wenn ein schlecht geschriebener Treiber den Fehler macht, IoSkipCurrentIrpStackLocation aufzurufen und dann eine Abschlussroutine festzulegen, überschreibt dieser Treiber möglicherweise eine vom Treiber darüber festgelegte Abschlussroutine.

Wenn der Treiber ein IRP geschrieben hat, sollte der Treiber nicht IoSkipCurrentIrpStackLocation aufrufen, bevor es das IRP an den nächsten niedrigeren Treiber übergibt. Wenn der Treiber IoSkipCurrentIrpStackLocation- auf einem stifteten IRP aufruft, bevor er an den nächsten unteren Treiber übergeben wird, wird das SL_PENDING_RETURNED Flag weiterhin im Control Member der I/O-Stapelposition für den nächsten Treiber festgelegt. Da der nächste Treiber diesen Stapelspeicherort besitzt und ihn möglicherweise ändert, könnte es das ausstehende Flag möglicherweise löschen. Diese Situation kann dazu führen, dass das Betriebssystem eine Fehlerüberprüfung ausstellen oder die Verarbeitung des IRP nie abgeschlossen wird.

Stattdessen sollte ein Treiber, der ein IRP geschrieben hat, IoCopyCurrentIrpStackLocationToNext aufrufen, um einen neuen Stapelspeicherort für den nächsten niedrigeren Treiber einzurichten, bevor er IoCallDriveraufruft.

Wenn Ihr Treiber IoSkipCurrentIrpStackLocation-aufruft, achten Sie darauf, die IO_STACK_LOCATION Struktur nicht auf eine Weise zu ändern, die unbeabsichtigt den unteren Treiber oder das Verhalten des Systems in Bezug auf diesen Treiber beeinflussen könnte. Beispiele sind das Ändern der IO_STACK_LOCATION Parameter Parameter Union oder das Aufrufen von IoMarkIrpPending.

Anforderungen

Anforderung Wert
mindestens unterstützte Client- Windows 2000
Header- wdm.h
IRQL- Beliebige Ebene