Condividi tramite


Recupero dello stato e del codice del problema per un'istanza del dispositivo

In Windows Vista e versioni successive di Windows, il modello di proprietà del dispositivo unificato include una proprietà di stato del dispositivo e una proprietà del codice di problema. Il modello di proprietà del dispositivo unificato usa le chiavi delle proprietà per rappresentare queste proprietà.

Windows Server 2003, Windows XP e Windows 2000 non supportano le chiavi delle proprietà del modello di proprietà unificata, né supportano i valori di voce del Registro di sistema corrispondenti che rappresentano queste proprietà. Tuttavia, le informazioni corrispondenti possono essere recuperate chiamando la funzione CM_Get_DevNode_Status . Per mantenere la compatibilità con le versioni precedenti di Windows, Windows Vista e versioni successive supportano anche CM_Get_DevNode_Status. È tuttavia consigliabile usare le chiavi delle proprietà del modello di proprietà del dispositivo unificato per accedere alle proprietà del dispositivo.

Inoltre, in Windows 8 e versioni successive di Windows, esiste anche una proprietà di stato del problema. Questa proprietà contiene un valore NTSTATUS che può contenere informazioni aggiuntive relative a un set di codice di problema nel dispositivo. Se il valore di stato del problema è STATUS_SUCCESS, non sono disponibili ulteriori informazioni relative al codice del problema quando il codice del problema è stato impostato nel dispositivo.

Per informazioni su come usare le chiavi delle proprietà per accedere alle proprietà del driver di dispositivo in Windows Vista e versioni successive, vedere Accesso alle proprietà dell'istanza del dispositivo (Windows Vista e versioni successive).

Per accedere allo stato e al codice del problema per un'istanza del dispositivo in Windows Server 2003, Windows XP e Windows 2000, chiamare CM_Get_DevNode_Status e fornire i parametri seguenti:

  • Impostare pulStatus su un puntatore a un valore tipizzato ULONG che riceve i flag di bit di stato impostati per un'istanza del dispositivo. Il valore di stato può essere qualsiasi combinazione dei flag di bit con prefisso "DN_" definito in Cfg.h.

  • Impostare pulProblemNumber su un puntatore a un valore tipizzato ULONG che riceve il numero di problema impostato per un'istanza del dispositivo. Il numero di problema è una delle costanti con il prefisso "CM_PROB_" definito in Cfg.h. CM_Get_DevNode_Status imposta il numero di problema solo se DN_HAS_PROBLEM è impostato in pulStatus.

  • Impostare dnDevInst su un handle di istanza del dispositivo sul dispositivo per cui recuperare lo stato e il codice del problema.

  • Impostare ulFlags su zero.

Se la chiamata a CM_Get_DevNode_Status ha esito positivo, CM_Get_DevNode_Status recupera lo stato richiesto e il codice del problema per l'istanza del dispositivo e restituisce CR_SUCCESS. Se la chiamata alla funzione ha esito negativo, CM_Get_DevNode_Status restituisce uno dei codici di errore con prefisso "CR_" definito in Cfgmgr32.h.

Uso di Gestione dispositivi per trovare il codice del problema e lo stato del problema per un dispositivo

Quando si verifica un problema con un dispositivo, Gestione dispositivi sovrapporrà l'icona per il dispositivo nella visualizzazione albero con un triangolo giallo con un segno esclamativo in esso. Facendo clic con il pulsante destro del mouse sul dispositivo e scegliendo Proprietà, verrà visualizzata una finestra di dialogo con altre informazioni sul dispositivo. Il codice del problema viene visualizzato nella scheda Generale nel campo Stato dispositivo .

La proprietà Stato problema viene visualizzata nell'elenco a discesa Proprietà nella scheda Dettagli per il dispositivo in Gestione dispositivi.

Uso del debugger per trovare il codice del problema e lo stato del problema per un dispositivo

Per visualizzare tutti i dispositivi con codice di problema nel debugger del kernel, usare l'estensione !devnode 0 21 . In questo modo viene visualizzato anche Il problemaStatus nel dispositivo. Ad esempio:

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

È anche possibile visualizzare il codice del problema e lo stato del problema eseguendo !devnode in un indirizzo DEVICE_NODE:

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

Vedere anche