IoSkipCurrentIrpStackLocation-Funktion (wdm.h)

Das IoSkipCurrentIrpStackLocation-Makro ändert den IO_STACK_LOCATION Arrayzeiger des Systems. Wenn der aktuelle Treiber den nächstniedrigen Treiber aufruft, erhält dieser Treiber dieselbe IO_STACK_LOCATION Struktur, die der aktuelle Treiber empfangen hat.

Syntax

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

Parameter

[in, out] Irp

Ein Zeiger auf den IRP.

Rückgabewert

Keine

Bemerkungen

Wenn Ihr Treiber ein IRP an den nächstniedrigen Treiber sendet, kann Ihr Treiber IoSkipCurrentIrpStackLocation aufrufen, wenn Sie nicht beabsichtigen, eine IoCompletion-Routine bereitzustellen (deren Adresse 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 eine IoCompletion-Routine für das IRP bereitstellen möchten, sollte Ihr Treiber IoCopyCurrentIrpStackLocationToNext anstelle von IoSkipCurrentIrpStackLocation aufrufen. Wenn ein falsch geschriebener Treiber den Fehler macht , IoSkipCurrentIrpStackLocation aufzurufen und dann eine Vervollständigungsroutine festzulegen, überschreibt dieser Treiber möglicherweise eine vervollständigungsroutine, die vom Treiber darüber festgelegt wurde.

Wenn der Treiber ein IRP geschrieben hat, sollte der Treiber IoSkipCurrentIrpStackLocation nicht aufrufen, bevor er den IRP an den nächstniedrigten Treiber übergibt. Wenn der Treiber IoSkipCurrentIrpStackLocation für einen stiftfähigen IRP aufruft, bevor er es an den nächstniedrigten Treiber übergibt, wird das flag SL_PENDING_RETURNED weiterhin im Steuerelement des E/A-Stapelspeicherorts für den nächsten Treiber festgelegt. Da der nächste Treiber diesen Stapelspeicherort besitzt und ihn möglicherweise ändert, kann er das ausstehende Flag möglicherweise löschen. Diese Situation kann dazu führen, dass das Betriebssystem eine Fehlerüberprüfung ausrichtt 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ächstniedrigen Treiber einzurichten, bevor IoCallDriver aufgerufen wird.

Wenn Ihr Treiber IoSkipCurrentIrpStackLocation aufruft, sollten Sie darauf achten, die IO_STACK_LOCATION-Struktur nicht so zu ändern, dass sich unbeabsichtigt auf den niedrigeren Treiber oder das Systemverhalten in Bezug auf diesen Treiber auswirken könnte. Beispiele hierfür sind das Ändern der Parameter-Union der IO_STACK_LOCATION-Struktur oder das Aufrufen von IoMarkIrpPending.

Anforderungen

Anforderung Wert
Unterstützte Mindestversion (Client) Windows 2000
Kopfzeile wdm.h
IRQL Beliebige Ebene