Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
In Windows Vista und höheren Versionen von Windows enthält das einheitliche Geräteeigenschaftsmodell eine Gerätestatuseigenschaft und eine Problemcodeeigenschaft. Das einheitliche Geräteeigenschaftenmodell verwendet Eigenschaftsschlüssel, um diese Eigenschaften darzustellen.
Windows Server 2003, Windows XP und Windows 2000 unterstützen weder die Eigenschaftenschlüssel des einheitlichen Eigenschaftenmodells noch unterstützen sie entsprechende Registrierungseintragswerte, die diese Eigenschaften darstellen. Die entsprechenden Informationen können jedoch durch Aufrufen der CM_Get_DevNode_Status-Funktion abgerufen werden. Um die Kompatibilität mit früheren Versionen von Windows aufrechtzuerhalten, unterstützen Windows Vista und spätere 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 eine Problemstatuseigenschaft. Diese Eigenschaft enthält einen NTSTATUS-Wert , der zusätzliche Informationen zu einem auf dem Gerät festgelegten Problemcode enthalten kann. Wenn der Problemstatuswert STATUS_SUCCESS ist, waren beim Festlegen des Problemcodes auf dem Gerät keine zusätzlichen Informationen zum Problemcode verfügbar.
Informationen zur Verwendung von Eigenschaftsschlüsseln für den Zugriff auf Gerätetreibereigenschaften in Windows Vista und späteren Versionen finden Sie unter "Zugreifen auf Geräteeigenschaften der Instanz" (Windows Vista und höher).
Um auf den Status- und Problemcode für eine Geräteinstanz auf Windows Server 2003, Windows XP und Windows 2000 zuzugreifen, rufen Sie CM_Get_DevNode_Status auf, und geben Sie die folgenden Parameter an:
Legen Sie pulStatus auf einen Zeiger auf einen Wert vom Typ ULONG fest, der die Statusbitkennzeichnungen empfängt, die für eine Geräteinstanz gesetzt sind. Der Statuswert kann eine beliebige Kombination der Bitkennzeichnungen mit dem Präfix "DN_" sein, die in Cfg.h definiert sind.
Legen Sie pulProblemNumber auf einen Zeiger auf einen ULONG-Wert fest, der die für eine Geräteinstanz 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 gesetzt ist.
Legen Sie dnDevInst auf ein Geräteinstanzhandle für das Gerät fest, für das der Status und der Problemcode abgerufen werden sollen.
Legen Sie ulFlags auf Null fest.
Wenn der Aufruf von CM_Get_DevNode_Status erfolgreich ist, ermittelt CM_Get_DevNode_Status den angeforderten Status und den Problemcode für die Geräteinstanz 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 des Geräte-Managers zum Suchen von Problemcode und Problemstatus 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 darin. 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ätestatus " angezeigt.
Die Eigenschaft "Problemstatus" wird in der Dropdownliste "Eigenschaft" auf der Registerkarte "Details" für das Gerät in Geräte-Manager angezeigt.
Verwenden des Debuggers zum Suchen von Problemcode und Problemstatus für ein Gerät
Verwenden Sie die Erweiterung !devnode 0 21 , um alle Geräte anzuzeigen, die einen Problemcode im Kerneldebugger aufweisen. Hier sehen Sie auch den ProblemStatus auf dem Gerät. Beispiele:
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 den Problemcode und den Problemstatus auch anzeigen, indem Sie !devnode auf einer 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