Bir Cihaz Örneği için Durum ve Sorun Kodunu Alma

Windows Vista ve sonraki Windows sürümlerinde, birleşik cihaz özellik modeli bir cihaz durumu özelliği ve bir sorun kodu özelliği içerir. Birleşik cihaz özellik modeli, bu özellikleri göstermek için özellik anahtarlarını kullanır.

Windows Server 2003, Windows XP ve Windows 2000, birleştirilmiş özellik modelinin özellik anahtarlarını desteklemez ve bu özellikleri temsil eden ilgili kayıt defteri girdisi değerlerini desteklemez. Ancak ilgili bilgiler CM_Get_DevNode_Status işlevi çağrılarak alınabilir. Windows'un önceki sürümleriyle uyumluluğu korumak için Windows Vista ve sonraki sürümler ayrıca CM_Get_DevNode_Status destekler. Ancak, cihaz özelliklerine erişmek için birleşik cihaz özellik modelinin özellik anahtarlarını kullanmanız gerekir.

Ayrıca, Windows Windows 8 ve sonraki sürümlerinde bir sorun durumu özelliği de vardır. Bu özellik, cihazda ayarlanan bir sorun koduyla ilgili ek bilgiler içerebilen bir NTSTATUS değeri içerir. Sorun durumu değeri STATUS_SUCCESS ise, cihazda sorun kodu ayarlandığında sorun koduyla ilgili ek bilgi mevcut değildi.

Windows Vista ve sonraki sürümlerde cihaz sürücüsü özelliklerine erişmek için özellik anahtarlarını kullanma hakkında bilgi için bkz. Cihaz Örneği Özelliklerine Erişme (Windows Vista ve Sonraki sürümler).

Windows Server 2003, Windows XP ve Windows 2000'de bir cihaz örneğinin durum ve sorun koduna erişmek için CM_Get_DevNode_Status çağırın ve aşağıdaki parametreleri sağlayın:

  • pulStatus'u, bir cihaz örneği için ayarlanan durum bit işaretlerini alan ULONG türündeki bir değere işaretçi olarak ayarlayın. Durum değeri, Cfg.h dosyasında tanımlanan "DN_" ön ekine sahip bit bayraklarının herhangi bir birleşimi olabilir.

  • pulProblemNumber değerini, bir cihaz örneği için ayarlanan sorun numarasını alan ULONG türündeki bir değerin işaretçisi olarak ayarlayın. Problem numarası, Cfg.h dosyasında tanımlanan "CM_PROB_" ön ekini içeren sabitlerden biridir. CM_Get_DevNode_Status sorun numarasını yalnızca pulStatus'ta DN_HAS_PROBLEM ayarlanmışsa ayarlar.

  • dnDevInst'i, durumu ve sorun kodu alınacak cihazın cihaz örneği tanıtıcısına ayarlayın.

  • ulFlags değerini sıfır olarak ayarlayın.

CM_Get_DevNode_Status çağrısı başarılı olursa CM_Get_DevNode_Status cihaz örneği için istenen durum ve sorun kodunu alır ve CR_SUCCESS döndürür. İşlev çağrısı başarısız olursa, CM_Get_DevNode_Status, Cfgmgr32.h içinde tanımlanan "CR_" ön ekine sahip hata kodlarından birini döndürür.

Bir cihazın sorun kodunu ve sorun durumunu bulmak için Aygıt Yöneticisi kullanma

Cihazla ilgili bir sorun olduğunda, Aygıt Yöneticisi ağaç görünümünde cihazın simgesinin üzerinde, içinde ünlem işareti bulunan sarı bir üçgen gösterir. Cihaza sağ tıklayıp Özellikler'i seçerek cihaz hakkında daha fazla bilgi içeren bir iletişim kutusu görüntülenir. Sorun kodu Genel sekmesinde, Cihaz durumu alanında görüntülenir.

Sorun durumu özelliği, Aygıt Yöneticisi'ndeki cihazın Ayrıntılar sekmesindeki Özellik açılan listesinde görünür.

Bir cihazın sorun kodunu ve sorun durumunu bulmak için hata ayıklayıcısını kullanma

Çekirdek hata ayıklayıcısında sorun kodu olan tüm cihazları görüntülemek için !devnode 0 21 uzantısını kullanın. Bu, size cihazdaki ProblemStatus'u da gösterir. Örneğin:

0: kd> !devnode 0 21
Dumping IopRootDeviceNode (= 0x85d37e30)
DevNode 0x8ad6ab78 for PDO 0x81635c30
  InstancePath is "ROOT\DIINSTALLDRIVER\0003"
  ServiceName is "isolated"
  State = DeviceNodeRemoved (0x312)
  Previous State = DeviceNodeInitialized (0x302)
  Problem = CM_PROB_FAILED_ADD
  Problem Status = 0xc00000bb

Ayrıca, bir DEVICE_NODE adresinde !devnode komutunu çalıştırarak da sorun kodunu ve sorun durumunu görüntüleyebilirsiniz:

0: kd> !devnode 0x8ad6ab78 
DevNode 0x8ad6ab78 for PDO 0x81635c30
  Parent 0x85d37e30   Sibling 0x8adee670   Child 0000000000   
  ...
  Problem = CM_PROB_FAILED_ADD
  Problem Status = 0xc00000bb

Ayrıca Bkz