Partager via


Récupération de l’état et du code du problème pour une instance d’appareil

Dans Windows Vista et les versions ultérieures de Windows, le modèle de propriété d’appareil unifié inclut une propriété de status d’appareil et une propriété de code de problème. Le modèle de propriété d’appareil unifié utilise des clés de propriété pour représenter ces propriétés.

Windows Server 2003, Windows XP et Windows 2000 ne prennent pas en charge les clés de propriété du modèle de propriété unifié, ni les valeurs d’entrée de Registre correspondantes qui représentent ces propriétés. Toutefois, les informations correspondantes peuvent être récupérées en appelant la fonction CM_Get_DevNode_Status . Pour maintenir la compatibilité avec les versions antérieures de Windows, Windows Vista et les versions ultérieures prennent également en charge CM_Get_DevNode_Status. Toutefois, vous devez utiliser les clés de propriété du modèle de propriété d’appareil unifié pour accéder aux propriétés de l’appareil.

En outre, dans Windows 8 et versions ultérieures de Windows, il existe également un problème status propriété. Cette propriété contient une valeur NTSTATUS qui peut contenir des informations supplémentaires relatives à un code problématique défini sur l’appareil. Si le problème status valeur est STATUS_SUCCESS, aucune information supplémentaire relative au code du problème n’était disponible lorsque le code du problème a été défini sur l’appareil.

Pour plus d’informations sur l’utilisation des clés de propriété pour accéder aux propriétés des pilotes de périphérique dans Windows Vista et les versions ultérieures, consultez Accès aux propriétés de l’instance d’appareil (Windows Vista et versions ultérieures).

Pour accéder au code de status et de problème d’un appareil instance sur Windows Server 2003, Windows XP et Windows 2000, appelez CM_Get_DevNode_Status et fournissez les paramètres suivants :

  • Définissez pulStatus sur un pointeur vers une valeur de type ULONG qui reçoit les indicateurs de bits status définis pour un instance d’appareil. La valeur status peut être n’importe quelle combinaison des indicateurs de bits avec le préfixe « DN_ » définis dans Cfg.h.

  • Définissez pulProblemNumber sur un pointeur vers une valeur de type ULONG qui reçoit le numéro de problème défini pour un appareil instance. Le nombre de problèmes est l’une des constantes avec le préfixe « CM_PROB_ » qui sont définies dans Cfg.h. CM_Get_DevNode_Status définit le numéro du problème uniquement si DN_HAS_PROBLEM est défini dans pulStatus.

  • Définissez dnDevInst sur un appareil instance gérer sur l’appareil pour lequel récupérer le status et le code du problème.

  • Définissez ulFlags sur zéro.

Si l’appel à CM_Get_DevNode_Status réussit, CM_Get_DevNode_Status récupère le status et le code du problème demandés pour le instance de l’appareil et retourne CR_SUCCESS. Si l’appel de fonction échoue, CM_Get_DevNode_Status retourne l’un des codes d’erreur avec le préfixe « CR_ » qui sont définis dans Cfgmgr32.h.

Utilisation de Gestionnaire de périphériques pour rechercher le code et les status de problème pour un appareil

En cas de problème avec un appareil, Gestionnaire de périphériques superpose l’icône de l’appareil dans l’arborescence avec un triangle jaune avec un point d’exclamation. En cliquant avec le bouton droit sur l’appareil et en choisissant Propriétés, une boîte de dialogue s’affiche avec plus d’informations sur l’appareil. Le code du problème s’affiche sous l’onglet Général, dans le champ Appareil status.

La propriété Problem status s’affiche dans la liste déroulante Propriété sous l’onglet Détails de l’appareil dans Gestionnaire de périphériques.

Utilisation du débogueur pour rechercher le code du problème et les status de problème pour un appareil

Pour afficher tous les appareils qui ont un code problématique dans le débogueur du noyau, utilisez l’extension !devnode 0 21 . Cela affiche également le ProblèmeStatus sur l’appareil. Par exemple :

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

Vous pouvez également afficher le code du problème et les status de problème en émettant !devnode sur une adresse 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

Voir aussi