Compartilhar via


Recuperando o status e o código do problema para uma instância de dispositivo

No Windows Vista e versões posteriores do Windows, o modelo de propriedade do dispositivo unificado inclui uma propriedade de status de dispositivo e uma propriedade de código de problema. O modelo de propriedade do dispositivo unificado usa chaves de propriedade para representar essas propriedades.

O Windows Server 2003, o Windows XP e o Windows 2000 não dão suporte às chaves de propriedade do modelo de propriedade unificado, nem dão suporte a valores de entrada do Registro correspondentes que representam essas propriedades. No entanto, as informações correspondentes podem ser recuperadas chamando a função CM_Get_DevNode_Status . Para manter a compatibilidade com versões anteriores do Windows, o Windows Vista e versões posteriores também dão suporte a CM_Get_DevNode_Status. No entanto, você deve usar as chaves de propriedade do modelo de propriedade do dispositivo unificado para acessar as propriedades do dispositivo.

Além disso, em Windows 8 e versões posteriores do Windows, também há um problema status propriedade. Essa propriedade contém um valor NTSTATUS que pode conter informações adicionais relacionadas a um código de problema definido no dispositivo. Se o problema status valor for STATUS_SUCCESS, nenhuma informação adicional relacionada ao código do problema estava disponível quando o código do problema foi definido no dispositivo.

Para obter informações sobre como usar chaves de propriedade para acessar as propriedades do driver de dispositivo no Windows Vista e versões posteriores, consulte Acessando propriedades de instância de dispositivo (Windows Vista e posterior).

Para acessar o status e o código de problema de uma instância de dispositivo no Windows Server 2003, Windows XP e Windows 2000, chame CM_Get_DevNode_Status e forneça os seguintes parâmetros:

  • Defina pulStatus como um ponteiro para um valor do tipo ULONG que recebe os sinalizadores de bits status definidos para uma instância de dispositivo. O valor status pode ser qualquer combinação dos sinalizadores de bits com o prefixo "DN_" definido em Cfg.h.

  • Defina pulProblemNumber como um ponteiro para um valor do tipo ULONG que recebe o número do problema definido para uma instância de dispositivo. O número do problema é uma das constantes com o prefixo "CM_PROB_" definido em Cfg.h. CM_Get_DevNode_Status define o número do problema somente se DN_HAS_PROBLEM estiver definido em pulStatus.

  • Defina dnDevInst como um identificador de instância de dispositivo para o dispositivo para o qual recuperar a status e o código do problema.

  • Defina ulFlags como zero.

Se a chamada para CM_Get_DevNode_Status for bem-sucedida, CM_Get_DevNode_Status recuperará o status solicitado e o código do problema para a instância do dispositivo e retornará CR_SUCCESS. Se a chamada de função falhar, CM_Get_DevNode_Status retornará um dos códigos de erro com o prefixo "CR_" definido em Cfgmgr32.h.

Usar Gerenciador de Dispositivos para localizar o código do problema e o problema status para um dispositivo

Quando houver um problema com um dispositivo, Gerenciador de Dispositivos sobreporá o ícone do dispositivo no modo de exibição de árvore com um triângulo amarelo com um ponto de exclamação nele. Ao clicar com o botão direito do mouse no dispositivo e escolher Propriedades, uma caixa de diálogo será exibida com mais informações sobre o dispositivo. O código do problema aparece na guia Geral, no campo Dispositivo status.

A propriedade status problema aparece na lista suspensa Propriedade na guia Detalhes do dispositivo no Gerenciador de Dispositivos.

Usando o depurador para localizar o código do problema e o problema status para um dispositivo

Para exibir todos os dispositivos que têm um código de problema no depurador de kernel, use a extensão !devnode 0 21 . Isso também mostra o ProblemStatus no dispositivo. Por exemplo:

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

Você também pode exibir o código do problema e status de problema emitindo !devnode em um endereço 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 Também