Anteckning
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
Viktigt!
Om du letar efter en tabell med mappningar av NTSTATUS-värden till motsvarande Win32-felkoder läser du NTSTATUS till Win32 Felkodsmappningar.
Många standarddrivrutinsrutiner i kernelläge och drivrutinsstödrutiner använder NTSTATUS-typen för returvärden. Dessutom tillhandahåller drivrutiner ett NTSTATUS-typat värde i IO_STATUS_BLOCK-strukturen för en IRP när IRP:er slutförs. NTSTATUS-typen definieras i Ntdef.h, och statuskoderna som tillhandahålls av systemet definieras i Ntstatus.h. (Leverantörer kan också definiera privata statuskoder, även om de sällan behöver det. Mer information finns i Definiera nya NTSTATUS-värden.)
NTSTATUS-värden är indelade i fyra typer: framgångsvärden, informationsvärden, varningar och felvärden.
Flera värden tilldelas till varje typ. Ett vanligt misstag när du testar för en lyckad retur från en rutin är att jämföra rutinens returvärde med STATUS_SUCCESS. Den här jämförelsen söker bara efter ett av flera lyckade värden.
När du testar ett returvärde bör du använda något av följande systembaserade makron (definieras i Ntdef.h):
| Makro | Beskrivning | 
|---|---|
| NT_SUCCESS(Status) | Utvärderas till TRUE om returvärdet som anges av Status är en lyckad typ (0 − 0x3FFFFFFF) eller en informationstyp (0x40000000 − 0x7FFFFFFF). | 
| NT_INFORMATION(status) | Utvärderas till TRUE om returvärdet som anges av Status är en informationstyp (0x40000000 − 0x7FFFFFFF). | 
| NT_WARNING(Status) | Utvärderas till TRUE om returvärdet som anges av Status är en varningstyp (0x80000000 − 0xBFFFFFFF). | 
| NT_ERROR(Status) | Utvärderas till TRUE om returvärdet som anges av Status är en feltyp (0xC0000000 – 0xFFFFFFFF). | 
Anta till exempel att en drivrutin anropar IoRegisterDeviceInterface för att registrera ett enhetsgränssnitt. Om drivrutinen kontrollerar returvärdet med hjälp av makrot NT_SUCCESS utvärderas makrot till TRUE om rutinen returnerar STATUS_SUCCESS, vilket inte anger några fel, eller om det returnerar informationsstatusen STATUS_OBJECT_NAME_EXISTS, vilket indikerar att enhetsgränssnittet redan är registrerat.
Anta att en drivrutin anropar ZwEnumerateKey för att räkna upp undernycklarna för en angiven registernyckel. Om NT_SUCCESS makrot utvärderas till FALSE kan det bero på att rutinen returnerade STATUS_INVALID_PARAMETER, vilket är en felkod, eller på att rutinen returnerade STATUS_NO_MORE_ENTRIES, vilket är en varningskod.
Anta slutligen att en drivrutin skickar en IRP som gör att en drivrutin på lägre nivå läser information från en enhet. Om den begärande drivrutinen anger en buffert som är för liten för att ta emot information kan drivrutinen på lägre nivå svara genom att returnera STATUS_BUFFER_TOO_SMALL, vilket är en felkod. Om den första drivrutinen anger en buffert som kan ta emot vissa, men inte alla, av den begärda informationen, kan den lägre drivrutinen svara genom att ange så mycket data som möjligt och sedan returnera STATUS_BUFFER_OVERFLOW, vilket är en varningskod. Om den första drivrutinen testar statusvärdet med hjälp av NT_SUCCESS eller NT_ERROR felaktigt, kan den oavsiktligt förlora en del av den mottagna informationen.