Freigeben über


IoSetMasterIrpStatus-Funktion (ntddk.h)

Die IoSetMasterIrpStatus-Routine ersetzt den Status-Wert in einem IRP bedingt durch den angegebenen NTSTATUS-Wert.

Syntax

void IoSetMasterIrpStatus(
  [in, out] PIRP     MasterIrp,
  [in]      NTSTATUS Status
);

Parameter

[in, out] MasterIrp

Ein Zeiger auf den master IRP. Weitere Informationen finden Sie in den Hinweisen.

[in] Status

Ein NTSTATUS-Wert, der mit dem Status-Member des E/A-status blocks im master IRP verglichen werden soll.

Rückgabewert

Keine

Bemerkungen

Nach Erhalt eines IRP kann ein Treiber zwei oder mehr untergeordnete IRPs erstellen, um die von der ursprünglichen (oder master) IRP angeforderte Arbeit auszuführen. Wenn die untergeordneten IRPs abgeschlossen sind, erfasst der Treiber die Vervollständigung status Codes aus den untergeordneten IRPs und führt sie zu einer einzelnen Vervollständigung status Code für die master IRP zusammen.

IoSetMasterIrpStatus implementiert eine einheitliche Richtlinie zum Zusammenführen der status Codes aus mehreren untergeordneten IRPs in einem status Code für eine master IRP. Wenn z. B. ein master IRP in zwei untergeordnete IRPs aufgeteilt wird und eine dieser untergeordneten IRPs erfolgreich ist und die andere fehlschlägt, wird der status Code aus dem fehlerhaften IRP als status Code für die master-IRP verwendet. Wenn jedoch beide untergeordneten IRPs fehlschlagen, wird der schwerwiegendere Fehlercode als status für die master IRP verwendet.

Vor dem ersten Aufruf von IoSetMasterIrpStatus legt der Treiber den IoStatus.Status-Member im master IRP auf STATUS_SUCCESS fest (oder STATUS_FT_READ_FROM_COPY, falls dies erwartet wird). Als Nächstes ruft der Treiber nach Abschluss jedes untergeordneten IRP IoSetMasterIrpStatus auf, um den status Code aus diesem IRP mit dem status Code im master IRP zusammenzuführen. In diesem Aufruf zeigt der PIRP-Parameter auf die master IRP, und der Status-Parameter wird auf den Wert des IoStatus.Status-Elements im untergeordneten IRP festgelegt.

In der Regel ersetzt IoSetMasterIrpStatus in den folgenden Fällen den status Code in PIRP-IoStatus.Status > durch den Wert Status:

  • Der status Wert in **PIRP* ist STATUS_SUCCESS, und Status ist ein Fehlercode.
  • Der status Wert in **PIRP* ist ein Fehlercode, aber Status ist ein schwerwiegenderer Fehlercode.
Es gibt zwei Ausnahmen von der allgemeinen Regel. Der Status-Wert STATUS_VERIFY_REQUIRED ersetzt immer den status-Wert in **PIRP*. Der Status-Wert STATUS_FT_READ_FROM_COPY ersetzt nie den status-Wert in **PIRP*.

Anforderungen

Anforderung Wert
Unterstützte Mindestversion (Client) Verfügbar ab Windows 8.
Zielplattform Universell
Header ntddk.h (include Ntddk.h, Ntifs.h)
Bibliothek NtosKrnl.lib
DLL NtosKrnl.exe
IRQL Beliebige Ebene.

Weitere Informationen

IRP