Definieren neuer NTSTATUS-Werte
Treiber können benutzerdefinierte IO_ERR_XXX-Konstanten definieren, die beim Protokollieren von Fehlern als ErrorCode-Werte verwendet werden sollen. Zusammen geschriebene Treiberpaare können auch benutzerdefinierte STATUS_XXX-Werte für IRP_MJ_INTERNAL_DEVICE_CONTROL Anforderungen definieren.
Das folgende Diagramm zeigt die Bitfelder in einem 32-Bit-NTSTATUS-Wert.
Das im vorherigen Diagramm gezeigte Sev-Feld gibt den Schweregradcode an, der einer der folgenden systemdefinierten Werte sein muss:
STATUS_SEVERITY_SUCCESS
Gibt einen erfolgreichen NTSTATUS-Wert an, z. B. STATUS_SUCCESS, oder den Wert, der in Fehlerprotokollpaketen IO_ERR_RETRY_SUCCEEDED.
STATUS_SEVERITY_INFORMATIONAL
Gibt einen informationellen NTSTATUS-Wert an, z. B. STATUS_SERIAL_MORE_WRITES.
STATUS_SEVERITY_WARNING
Gibt einen NTSTATUS-Warnungswert an, z. B. STATUS_DEVICE_PAPER_EMPTY.
STATUS_SEVERITY_ERROR
Gibt einen NTSTATUS-Fehlerwert an, z. B. STATUS_INSUFFICIENT_RESOURCES für einen FinalStatus-Wert oder IO_ERR_CONFIGURATION_ERROR für einen ErrorCode-Wert in Fehlerprotokollpaketen.
Die meisten öffentlichen IO_ERR_XXX-Konstanten gehören zur Kategorie STATUS_SEVERITY_ERROR.
Der Facility-Code gibt die Einrichtung an, die den Fehler generiert hat. Für neue IO_ERR_XXX-Werte geben Treiber den FACILITY_IO_ERROR_CODE Wert für Facility an. Für benutzerdefinierte STATUS_XXX-Werte ist die Bedeutung verschiedener Werte für Facility treiberdefiniert.
Das C-Bit gibt an, ob der Wert kundendefiniert oder von Microsoft definiert ist. Das Bit wird für kundendefinierte Werte und für von Microsoft definierte Werte eindeutig festgelegt.
Treiber können neue IO_ERR_XXX-Werte definieren, um benutzerdefinierte Fehlermeldungen im Systemereignisprotokoll zu identifizieren. Eine Beschreibung der Definition der NTSTATUS-Werte und der von ihnen identifizierten Fehlermeldungen finden Sie unter Definieren von benutzerdefinierten Fehlertypen.
Treiberpaare können treiberspezifische STATUS_XXX-Werte definieren, um Informationen zu privat definierten IRP_MJ_INTERNAL_DEVICE_CONTROL Anforderungen vom unteren zum höheren Treiber des Paares zu kommunizieren.
Der Klassentreiber muss alle privaten STATUS_XXX-Werte einem systemdefinierten NTSTATUS-Wert zuordnen, wenn er eine IRP abschließt, wenn die IoCompletion-Routine eines vorhandenen Treibers auf höherer Ebene für diesen IRP aufgerufen wird.
Bei gekoppelten Anzeige- und Video-Miniporttreibern übernimmt der Videoporttreiber die Zuordnung zwischen öffentlichen STATUS_XXX-Werten und den win32-definierten Konstanten, die von Video-Miniporttreibern zurückgegeben werden. Weitere Informationen finden Sie unter Video-Miniporttreiber im Windows 2000-Anzeigetreibermodell.
Treiber können keine benutzerdefinierten NTSTATUS-Werte für IRPs verwenden, die im Benutzermodus empfangen werden können, da nur die systemdefinierten Werte in Win32-Fehlercodes übersetzt werden können.