Поделиться через


Получение статуса и кода проблемы для экземпляра устройства

В Windows Vista и более поздних версиях Windows модель унифицированных свойств устройства включает свойство состояния устройства и свойство кода проблемы. Модель унифицированных свойств устройства использует ключи свойств для представления этих свойств.

Windows Server 2003, Windows XP и Windows 2000 не поддерживают ключи свойств модели унифицированных свойств, а также не поддерживают соответствующие значения записи реестра, представляющие эти свойства. Однако соответствующие сведения можно получить, вызвав функцию CM_Get_DevNode_Status . Для обеспечения совместимости с более ранними версиями Windows в Windows Vista и более поздних версиях также поддерживается CM_Get_DevNode_Status. Однако для доступа к свойствам устройства следует использовать ключи свойств модели унифицированных свойств устройства.

Кроме того, в Windows 8 и более поздних версиях Windows также существует свойство состояния проблемы. Это свойство содержит значение NTSTATUS , которое может содержать дополнительные сведения, относящиеся к коду проблемы, заданному на устройстве. Если значение состояния проблемы STATUS_SUCCESS, дополнительные сведения о коде проблемы не были доступны при установке кода проблемы на устройстве.

Сведения об использовании ключей свойств для доступа к свойствам драйвера устройства в Windows Vista и более поздних версиях см. в разделе "Доступ к свойствам экземпляра устройства" (Windows Vista и более поздних версий).

Чтобы получить доступ к коду состояния и проблемы для экземпляра устройства в Windows Server 2003, Windows XP и Windows 2000, вызовите CM_Get_DevNode_Status и укажите следующие параметры:

  • Присвойте pulStatus указатель на значение типа ULONG, которое получает флаги состояния, установленные для экземпляра устройства. Значение состояния может быть любым сочетанием битовых флагов с префиксом "DN_", определенным в Cfg.h.

  • Задайте параметру pulProblemNumber указатель на значение типа ULONG, которое получает номер проблемы, заданный для экземпляра устройства. Номер проблемы является одной из констант с префиксом "CM_PROB_", определенным в Cfg.h. CM_Get_DevNode_Status задает номер проблемы только в том случае, если DN_HAS_PROBLEM задано в pulStatus.

  • Установите dnDevInst как дескриптор экземпляра устройства, для которого следует получить код состояния и проблему.

  • Задайте значение ulFlags равным нулю.

Если вызов CM_Get_DevNode_Status выполнен успешно, CM_Get_DevNode_Status извлекает запрошенный код состояния и проблемы для экземпляра устройства и возвращает CR_SUCCESS. Если вызов функции завершается ошибкой, CM_Get_DevNode_Status возвращает один из кодов ошибок с префиксом "CR_", определенным в Cfgmgr32.h.

Использование диспетчера устройств для поиска кода проблемы и состояния проблемы для устройства

При возникновении проблемы с устройством Диспетчер устройств наложит на значок устройства в древовидном представлении жёлтый треугольник с восклицательным знаком. Щелкнув устройство правой кнопкой мыши и выбрав "Свойства", появится диалоговое окно с дополнительными сведениями об устройстве. Код проблемы отображается на вкладке "Общие " в поле "Состояние устройства ".

Свойство состояния проблемы отображается в раскрывающемся списке "Свойства " на вкладке "Сведения " для устройства в диспетчере устройств.

Использование отладчика для поиска кода проблемы и состояния проблемы для устройства

Чтобы просмотреть все устройства с кодом проблемы в отладчике ядра, используйте расширение !devnode 0 21 . В этом разделе также показано значение ProblemStatus на устройстве. Рассмотрим пример.

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

Вы также можете просмотреть код проблемы и состояние проблемы, выдав !devnode в адресе 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

См. также