Sdílet prostřednictvím


Definování nových hodnot NTSTATUS

Ovladače mohou při protokolování chyb definovat vlastní konstanty IO_ERR_XXX , které se použijí jako hodnoty ErrorCode . Dvojice ovladačů, které jsou zapsány dohromady, mohou také definovat vlastní hodnoty STATUS_XXX pro požadavky IRP_MJ_INTERNAL_DEVICE_CONTROL .

Následující diagram znázorňuje bitová pole v 32bitové hodnotě NTSTATUS.

diagram znázorňující bitová pole v hodnotě ntstatus

Pole Sev zobrazené v předchozím diagramu označuje kód závažnosti, který musí být jednou z následujících systémově definovaných hodnot:

STATUS_SEVERITY_SUCCESS
Označuje úspěšnou hodnotu NTSTATUS, například STATUS_SUCCESS, nebo hodnotu IO_ERR_RETRY_SUCCEEDED v paketech protokolu chyb.

STATUS_SEVERITY_INFORMATIONAL
Označuje informační hodnotu NTSTATUS, například STATUS_SERIAL_MORE_WRITES.

STATUS_SEVERITY_WARNING
Označuje hodnotu NTSTATUS typu upozornění; jako příklad lze uvést STATUS_DEVICE_PAPER_EMPTY.

STAV_ZÁVAŽNOST_CHYBY
Označuje hodnotu chyby NTSTATUS, například STATUS_INSUFFICIENT_RESOURCES pro hodnotu FinalStatus nebo IO_ERR_CONFIGURATION_ERROR pro hodnotu ErrorCode v chybových protokolech.

Většina veřejných konstant IO_ERR_XXX patří do kategorie STATUS_SEVERITY_ERROR.

Kód zařízení určuje zařízení, které chybu vygenerovalo. U nových hodnot IO_ERR_XXX určují ovladače hodnotu FACILITY_IO_ERROR_CODE pro zařízení. Pro vlastní hodnoty STATUS_XXX je význam různých hodnot pro zařízení definován ovladačem.

Bit jazyka C určuje, jestli je hodnota definovaná zákazníkem nebo microsoftem. Bit je nastavený pro hodnoty definované zákazníkem a vymaže se u hodnot definovaných Microsoftem.

Ovladače mohou definovat nové hodnoty IO_ERR_XXX k identifikaci vlastních chybových zpráv v protokolu událostí systému. Popis, jak definovat hodnoty NTSTATUS a chybové zprávy, které identifikují, naleznete v tématu Definování vlastních typů chyb.

Páry ovladačů mohou definovat hodnoty specifické pro ovladač STATUS_XXX, aby mohly komunikovat informace o soukromě definovaných IRP_MJ_INTERNAL_DEVICE_CONTROL žádostech od nižšího k vyššímu ovladači.

Ovladač třídy musí při dokončení protokolu IRP namapovat jakoukoli privátní hodnotu STATUS_XXX na hodnotu NTSTATUS definovanou systémem, pokud se pro tento protokol IRP může volat existující rutina IoCompletion ovladače vyšší úrovně.

U spárovaných ovladačů zobrazení a miniportu videa ovladač video portu mapuje hodnoty veřejného STATUS_XXX na konstanty definované systémem Win32, které vracejí ovladače miniportu videa. Další informace naleznete v tématu Video Miniport Ovladače v modelu ovladače zobrazení systému Windows 2000.

Ovladače nemůžou používat vlastní hodnoty NTSTATUS pro irps, které lze přijímat v uživatelském režimu, protože pouze hodnoty definované systémem lze přeložit do kódů chyb Win32.