Dela via


Hämtar status- och problemkoden för en enhetsinstans

I Windows Vista och senare versioner av Windows innehåller den enhetliga enhetsegenskapsmodellen en egenskap för enhetsstatus och en problemkodegenskap. Den enhetliga enhetsegenskapsmodellen använder egenskapsnycklar för att representera dessa egenskaper.

Windows Server 2003, Windows XP och Windows 2000 stöder inte egenskapsnycklarna för den enhetliga egenskapsmodellen och stöder inte heller motsvarande registerpostvärden som representerar dessa egenskaper. Motsvarande information kan dock hämtas genom att anropa funktionen CM_Get_DevNode_Status . För att upprätthålla kompatibilitet med tidigare versioner av Windows stöder Windows Vista och senare versioner även CM_Get_DevNode_Status. Du bör dock använda egenskapsnycklarna för den enhetliga enhetsegenskapsmodellen för att få åtkomst till enhetsegenskaperna.

I Windows 8 och senare versioner av Windows finns det dessutom en problemstatusegenskap. Den här egenskapen innehåller ett NTSTATUS-värde som kan innehålla ytterligare information om en problemkoduppsättning på enheten. Om problemets statusvärde är STATUS_SUCCESS var ingen ytterligare information om problemkoden tillgänglig när problemkoden angavs på enheten.

Information om hur du använder egenskapsnycklar för att komma åt egenskaper för enhetsdrivrutiner i Windows Vista och senare versioner finns i Komma åt egenskaper för enhetsinstanser (Windows Vista och senare).

Om du vill komma åt status- och problemkoden för en enhetsinstans på Windows Server 2003, Windows XP och Windows 2000 anropar du CM_Get_DevNode_Status och anger följande parametrar:

  • Ange pulStatus till en pekare till ett ULONG-typat värde som tar emot statusbitflaggor som har angetts för en enhetsinstans. Statusvärdet kan vara valfri kombination av bitflaggor med prefixet "DN_" som definieras i Cfg.h.

  • Ange pulProblemNumber till en pekare till ett ULONG-typat värde som tar emot det problemnummer som har angetts för en enhetsinstans. Problemnumret är en av konstanterna med prefixet "CM_PROB_" som definieras i Cfg.h. CM_Get_DevNode_Status anger endast problemnumret om DN_HAS_PROBLEM anges i pulStatus.

  • Ange dnDevInst till en enhetsinstansreferens till den enhet som status- och problemkoden ska hämtas för.

  • Ställ in ulFlags på noll.

Om anropet till CM_Get_DevNode_Status lyckas hämtar CM_Get_DevNode_Status den begärda statusen och problemkoden för enhetsinstansen och returnerar CR_SUCCESS. Om funktionsanropet misslyckas returnerar CM_Get_DevNode_Status en av felkoderna med prefixet "CR_" som definieras i Cfgmgr32.h.

Använda Enhetshanteraren för att hitta problemkod och problemstatus för en enhet

När det uppstår problem med en enhet lägger Enhetshanteraren över ikonen för enheten i trädvyn med en gul triangel med ett utropstecken i den. Genom att högerklicka på enheten och välja Egenskaper visas en dialogruta med mer information om enheten. Problemkoden visas på fliken Allmänt i fältet Enhetsstatus .

Egenskapen Problemstatus visas i listrutan Egenskap på fliken Information för enheten i Enhetshanteraren.

Använda felsökningsprogrammet för att hitta problemkod och problemstatus för en enhet

Om du vill visa alla enheter som har en problemkod i kernelfelsökaren använder du tillägget !devnode 0 21 . Detta visar även problemstatus på enheten. Till exempel:

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

Du kan också visa problemkod och problemstatus genom att utfärda !devnode på en DEVICE_NODE adress:

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

Se även