Compartir vía


Recuperar el estado y el código de problema de una instancia de dispositivo

En Windows Vista y versiones posteriores de Windows, el modelo de propiedad de dispositivo unificado incluye una propiedad de estado del dispositivo y una propiedad de código de problema. El modelo de propiedades de dispositivo unificado usa claves de propiedad para representar estas propiedades.

Windows Server 2003, Windows XP y Windows 2000 no admiten las claves de propiedad del modelo de propiedades unificado, ni admiten los valores de entrada del Registro correspondientes que representan estas propiedades. Sin embargo, la información correspondiente se puede recuperar llamando a la función CM_Get_DevNode_Status . Para mantener la compatibilidad con versiones anteriores de Windows, Windows Vista y versiones posteriores también admiten CM_Get_DevNode_Status. Sin embargo, debe usar las claves de propiedad del modelo de propiedades de dispositivo unificado para acceder a las propiedades del dispositivo.

Además, en Windows 8 y versiones posteriores de Windows, también hay una propiedad de estado de problema. Esta propiedad contiene un valor NTSTATUS que puede contener información adicional relacionada con un código de problema establecido en el dispositivo. Si el valor de estado del problema es STATUS_SUCCESS, no había información adicional relacionada con el código del problema disponible cuando se estableció el código del problema en el dispositivo.

Para obtener información sobre cómo usar las claves de propiedad para acceder a las propiedades del controlador de dispositivo en Windows Vista y versiones posteriores, vea Obtener acceso a las propiedades de instancia de dispositivo (Windows Vista y versiones posteriores).

Para acceder al estado y el código de problema de una instancia de dispositivo en Windows Server 2003, Windows XP y Windows 2000, llame a CM_Get_DevNode_Status y proporcione los parámetros siguientes:

  • Establezca pulStatus en un puntero a un valor con tipo ULONG que reciba las marcas de bits de estado establecidas para una instancia de dispositivo. El valor de estado puede ser cualquier combinación de las marcas de bits con el prefijo "DN_" que se definen en Cfg.h.

  • Establezca pulProblemNumber en un puntero a un valor con tipo ULONG que reciba el número de problema establecido para una instancia de dispositivo. El número de problema es una de las constantes con el prefijo "CM_PROB_" que se definen en Cfg.h. CM_Get_DevNode_Status establece el número de problema solo si DN_HAS_PROBLEM se establece en pulStatus.

  • Establezca dnDevInst en un identificador de instancia de dispositivo en el dispositivo para el que se va a recuperar el estado y el código del problema.

  • Establezca ulFlags en cero.

Si la llamada a CM_Get_DevNode_Status se realiza correctamente, CM_Get_DevNode_Status recupera el estado solicitado y el código de problema de la instancia del dispositivo y devuelve CR_SUCCESS. Si se produce un error en la llamada de función, CM_Get_DevNode_Status devuelve uno de los códigos de error con el prefijo "CR_" que se definen en Cfgmgr32.h.

Uso de Administrador de dispositivos para buscar código de problema y estado de problema para un dispositivo

Cuando hay un problema con un dispositivo, Administrador de dispositivos superponerá el icono del dispositivo en la vista de árbol con un triángulo amarillo con una marca de exclamación en él. Al hacer clic con el botón derecho en el dispositivo y elegir Propiedades, aparecerá un cuadro de diálogo con más información sobre el dispositivo. El código del problema aparece en la pestaña General , en el campo Estado del dispositivo .

La propiedad Estado del problema aparece en la lista desplegable Propiedad de la pestaña Detalles del dispositivo en Administrador de dispositivos.

Uso del depurador para buscar código de problema y estado de problema para un dispositivo

Para ver todos los dispositivos que tienen un código de problema en el depurador de kernel, use la extensión !devnode 0 21 . Esto también muestra problemStatus en el dispositivo. Por ejemplo:

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

También puede ver el código del problema y el estado del problema emitiendo !devnode en una dirección de 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

Consulte también