Sdílet prostřednictvím


Načítání stavového a problémového kódu pro instanci zařízení

V systému Windows Vista a novějších verzích Systému Windows zahrnuje model sjednocených vlastností zařízenívlastnost stavu zařízení a vlastnost kódu problému. Model sjednocených vlastností zařízení používá klíče vlastností k reprezentaci těchto vlastností.

Windows Server 2003, Windows XP a Windows 2000 nepodporují klíče vlastností sjednoceného modelu vlastností ani nepodporují odpovídající hodnoty položek registru, které představují tyto vlastnosti. Odpovídající informace je však možné načíst voláním funkce CM_Get_DevNode_Status . Chcete-li zachovat kompatibilitu se staršími verzemi systému Windows, systém Windows Vista a novější verze také podporují CM_Get_DevNode_Status. Pro přístup k vlastnostem zařízení byste ale měli použít klíče vlastností sjednoceného modelu vlastností zařízení.

Kromě toho ve Windows 8 a novějších verzích Systému Windows existuje také vlastnost stavu problému. Tato vlastnost obsahuje hodnotu NTSTATUS , která může obsahovat další informace týkající se kódu problému nastaveného na zařízení. Pokud je hodnota stavu problému STATUS_SUCCESS, nebyly při nastavení kódu problému na zařízení k dispozici žádné další informace týkající se kódu problému.

Informace o použití klíčů vlastností pro přístup k vlastnostem ovladače zařízení v systému Windows Vista a novějších verzích naleznete v tématu Přístup k vlastnostem instance zařízení (Windows Vista a novější).

Pokud chcete získat přístup ke stavu a kódu problému instance zařízení v systémech Windows Server 2003, Windows XP a Windows 2000, zavolejte CM_Get_DevNode_Status a zadejte následující parametry:

  • Nastavte pulStatus na ukazatel na hodnotu typu ULONG, která přijímá stavové bitové příznaky nastavené pro instanci zařízení. Hodnota stavu může být libovolná kombinace bitových příznaků s předponou "DN_", která jsou definována v cfg.h.

  • Nastavte pulProblemNumber na ukazatel typu ULONG, který obdrží číslo problému nastavené pro instanci zařízení. Číslo problému je jednou z konstant s předponou "CM_PROB_", která je definována v cfg.h. CM_Get_DevNode_Status nastaví číslo problému pouze v případě, že je DN_HAS_PROBLEM nastavena v pulStatus.

  • Nastavte dnDevInst na popisovač instance zařízení na zařízení, pro které se má načíst stav a kód problému.

  • Nastavte ulFlags na nulu.

Pokud volání CM_Get_DevNode_Status proběhne úspěšně, CM_Get_DevNode_Status načte požadovaný stav a kód problému instance zařízení a vrátí CR_SUCCESS. Pokud volání funkce selže, CM_Get_DevNode_Status vrátí jeden z kódů chyb s předponou "CR_", která jsou definována v Cfgmgr32.h.

Vyhledání kódu problému a stavu problému pro zařízení pomocí Správce zařízení

Pokud dojde k problému se zařízením, Správce zařízení překrytí ikonu zařízení ve stromovém zobrazení žlutým trojúhelníkem s vykřičníkem. Když kliknete pravým tlačítkem na zařízení a zvolíte Vlastnosti, zobrazí se dialogové okno s dalšími informacemi o zařízení. Kód problému se zobrazí na kartě Obecné v poli Stav zařízení .

Vlastnost Stav problému se zobrazí v rozevíracím seznamu Vlastnost na kartě Podrobnosti pro zařízení ve Správci zařízení.

Identifikování kódu a stavu problémů zařízení pomocí ladicího programu

Pokud chcete v ladicím programu jádra zobrazit všechna zařízení s kódem problému, použijte příkaz !devnode 0 21. Zobrazí se také stav problému na zařízení. Například:

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

Kód problému a stav problému můžete zobrazit také tak, že na adrese DEVICE_NODE vydáte !devnode :

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

Viz také