Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
Önemli
NTSTATUS değerlerinin karşılık gelen Win32 hata kodlarıyla eşleme tablosunu arıyorsanız bkz. NTSTATUS to Win32 Hata Kodu Eşlemeleri.
Birçok çekirdek modu standart sürücü yordamı ve sürücü destek yordamı, dönüş değerleri için NTSTATUS türünü kullanır. Ayrıca, sürücüler IRP'leri tamamlarken IRP'nin IO_STATUS_BLOCK yapısında NTSTATUS türündeki bir değer sağlar. NTSTATUS türü Ntdef.h içinde tanımlanır ve sistem tarafından sağlanan durum kodları Ntstatus.h içinde tanımlanır. (Satıcılar özel durum kodları da tanımlayabilir, ancak nadiren buna ihtiyaç duyarlar. Daha fazla bilgi için bkz . Yeni NTSTATUS Değerlerini Tanımlama.)
NTSTATUS değerleri dört türe ayrılır:
- Başarı değerleri
- Bilgi değerleri
- Warnings
- Hata değerleri
Her türe çok sayıda değer atanır. Bir yordamdan başarılı bir dönüş için test yapılırken yapılan yaygın bir hata, yordamın dönüş değerini STATUS_SUCCESS ile karşılaştırmaktır. Bu karşılaştırma birkaç başarı değerinden yalnızca birini denetler.
Bir dönüş değerini test ederken, sistem tarafından sağlanan aşağıdaki makrolardan birini kullanmalısınız ( Ntdef.h'de tanımlanır):
| Makro | Açıklama |
|---|---|
| NT_SUCCESS(Durum) | Durum tarafından belirtilen dönüş değeri bir başarı türü (0 - 0x3FFFFFFF) veya bilgi türü (0x40000000 - 0x7FFFFFFF) ise TRUE olarak değerlendirilir. |
| NT_INFORMATION(Durum) | Durum tarafından belirtilen dönüş değeri bilgi türüyse (0x40000000 - 0x7FFFFFFF) TRUE olarak değerlendirilir. |
| NT_WARNING(Durum) | Durum tarafından belirtilen dönüş değeri bir uyarı türüyse (0x80000000 - 0xBFFFFFFF) TRUE olarak değerlendirilir. |
| NT_ERROR(Durum) | Durum tarafından belirtilen dönüş değeri bir hata türüyse (0xC0000000 - 0xFFFFFFFF) TRUE olarak değerlendirilir. |
Örneğin, bir sürücünün cihaz arabirimini kaydetmek için IoRegisterDeviceInterface çağrısında olduğunu varsayalım. Sürücü NT_SUCCESS makroyu kullanarak dönüş değerini denetlerse, yordam hata içermeyen STATUS_SUCCESS döndürüyorsa veya cihaz arabiriminin zaten kayıtlı olduğunu gösteren STATUS_OBJECT_NAME_EXISTS bilgilendirici durumu döndürüyorsa makro TRUE olarak değerlendirilir.
Başka bir örnek olarak, bir sürücünün belirtilen kayıt defteri anahtarının alt anahtarlarını numaralandırmak için ZwEnumerateKey'i çağırmış olduğunu varsayalım. NT_SUCCESS makro YANLIŞ olarak değerlendirilirse, bunun nedeni yordamın hata kodu olan STATUS_INVALID_PARAMETER döndürmesi veya yordamın bir uyarı kodu olan STATUS_NO_MORE_ENTRIES döndürmesi olabilir.
Son örnek olarak, bir sürücünün daha düşük düzey bir sürücünün bir cihazdan bilgi okumasına neden olan bir IRP gönderdiğini varsayalım. İstekte bulunan sürücü herhangi bir bilgi alamayacak kadar küçük bir arabellek belirtiyorsa, alt düzey sürücü bir hata kodu olan STATUS_BUFFER_TOO_SMALL döndürerek yanıt verebilir. İlk sürücü, istenen bilgilerin tümünü değil bazılarını alabilen bir arabellek belirtiyorsa, alt düzey sürücü mümkün olduğunca çok veri sağlayarak ve ardından uyarı kodu olan STATUS_BUFFER_OVERFLOW döndürerek yanıt verebilir. İlk sürücü NT_SUCCESS veya NT_ERROR'ın yanlış kullanımını yaparak durum değerini test ederse, alınan bilgilerin bazılarını yanlışlıkla bırakabilir.