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.
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. |