Abrufen des Status- und Problemcodes für eine Geräteinstanz

In Windows Vista und höheren Versionen von Windows enthält das einheitliche Geräteeigenschaftenmodell ein Gerät status Eigenschaft und eine Problemcodeeigenschaft. Das einheitliche Geräteeigenschaftenmodell verwendet Eigenschaftenschlüssel , um diese Eigenschaften darzustellen.

Windows Server 2003, Windows XP und Windows 2000 unterstützen weder die Eigenschaftenschlüssel des einheitlichen Eigenschaftenmodells noch die entsprechenden Registrierungseintragswerte, die diese Eigenschaften darstellen. Die entsprechenden Informationen können jedoch durch Aufrufen der funktion CM_Get_DevNode_Status abgerufen werden. Um die Kompatibilität mit früheren Versionen von Windows zu gewährleisten, unterstützen Windows Vista und höhere Versionen auch CM_Get_DevNode_Status. Sie sollten jedoch die Eigenschaftenschlüssel des einheitlichen Geräteeigenschaftenmodells verwenden, um auf die Geräteeigenschaften zuzugreifen.

Darüber hinaus gibt es in Windows 8 und höheren Versionen von Windows auch ein Problem status Eigenschaft. Diese Eigenschaft enthält einen NTSTATUS-Wert , der zusätzliche Informationen zu einem auf dem Gerät festgelegten Problemcode enthalten kann. Wenn das Problem status Wert STATUS_SUCCESS ist, waren keine zusätzlichen Informationen zum Problemcode verfügbar, als der Problemcode auf dem Gerät festgelegt wurde.

Informationen zur Verwendung von Eigenschaftenschlüsseln für den Zugriff auf Gerätetreibereigenschaften in Windows Vista und höheren Versionen finden Sie unter Zugreifen auf Geräteinstanzeigenschaften (Windows Vista und höher).

Rufen Sie CM_Get_DevNode_Status auf, um auf die status und den Problemcode für ein Gerät zuzugreifen, das unter Windows Server 2003, Windows XP und Windows 2000 instance:

  • Legen Sie pulStatus auf einen Zeiger auf einen ULONG-typisierten Wert fest, der die status Bitflags empfängt, die für ein Gerät instance festgelegt sind. Der status Wert kann eine beliebige Kombination der Bitflags mit dem Präfix "DN_" sein, die in Cfg.h definiert sind.

  • Legen Sie pulProblemNumber auf einen Zeiger auf einen ULONG-typisierten Wert fest, der die Für ein Gerät instance festgelegte Problemnummer empfängt. Die Problemnummer ist eine der Konstanten mit dem Präfix "CM_PROB_", die in Cfg.h definiert sind. CM_Get_DevNode_Status legt die Problemnummer nur fest, wenn DN_HAS_PROBLEM in pulStatus festgelegt ist.

  • Legen Sie dnDevInst auf ein Gerät fest, instance handle für das Gerät, für das die status und den Problemcode abgerufen werden soll.

  • Legen Sie ulFlags auf 0 (null) fest.

Wenn der Aufruf von CM_Get_DevNode_Status erfolgreich ist, ruft CM_Get_DevNode_Status die angeforderte status und den Problemcode für das gerät instance ab und gibt CR_SUCCESS zurück. Wenn der Funktionsaufruf fehlschlägt, gibt CM_Get_DevNode_Status einen der Fehlercodes mit dem Präfix "CR_" zurück, die in Cfgmgr32.h definiert sind.

Verwenden von Geräte-Manager zum Suchen von Problemcode und status für ein Gerät

Wenn ein Problem mit einem Gerät auftritt, überlagert Geräte-Manager das Symbol für das Gerät in der Strukturansicht mit einem gelben Dreieck mit einem Ausrufezeichen. Wenn Sie mit der rechten Maustaste auf das Gerät klicken und Eigenschaften auswählen, wird ein Dialogfeld mit weiteren Informationen zum Gerät angezeigt. Der Problemcode wird auf der Registerkarte Allgemein im Feld Gerät status angezeigt.

Die Eigenschaft Problem status wird in der Dropdownliste Eigenschaft auf der Registerkarte Details für das Gerät in Geräte-Manager angezeigt.

Verwenden des Debuggers zum Ermitteln von Problemcode und problem status für ein Gerät

Verwenden Sie die Erweiterung !devnode 0 21 , um alle Geräte anzuzeigen, die über einen Problemcode im Kerneldebugger verfügen. Hier wird auch der ProblemStatus auf dem Gerät angezeigt. Beispiel:

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

Sie können auch Den Problemcode und status anzeigen, indem Sie !devnode für eine DEVICE_NODE Adresse ausgeben:

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

Weitere Informationen