Код экземпляра устройства
Получение кода состояния и проблемы для экземпляра устройства - Windows drivers
Twitter LinkedIn Facebook Адрес электронной почты
- Статья
- Чтение занимает 2 мин
В 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
См. также
- DEVPKEY_Device_DevNodeStatus
- DEVPKEY_Device_ProblemCode
- DEVPKEY_Device_ProblemStatus
Способы выявления и нахождения драйвера для неизвестного устройства
Февраль 12th, 2014 Данил
Установка и обслуживание драйверов,всегда было головной болью для многих пользователей Windows всё время,будь то в Windows 95 или Windows Vista. Особенно при переходе с Vista или XP на Windows 7, можно встретить различные проблемы,касающиеся идентификации устройства и драйверов.Это стало распространённой жалобой на то, что Windows не может определить устройство,установленное на компьютер или подключаемое к нему,и Windows не удаётся найти правильный или неправильный драйвер для устройства.
Диспетчер устройств будет отображать неизвестное устройство,как неизвестное устройство с желтым вопросительным знаком.Посмотрите на изображение ниже для экземпляра.
В случае каких-то неопределенных, неизвестных или не установленных драйверов устройств,пользователь может вручную загрузить их из Интернета или использовать диск с драйверами для установки драйвера.Однако,перед установкой соответствующего драйвера,пользователю необходимо идентифицировать и понять, что это за неизвестное устройство.Вот несколько способов, чтобы найти драйвер неизвестного устройства в Windows.
1.Вручную определить неизвестное устройство
Это возможно, самый тяжелый способ идентификации устройства. Во-первых, мы должны выяснить код экземпляра устройства , который состоит из Vendor ID и Идентификатор устройства. Чтобы найти код экземпляра устройства перейдите в Диспетчер Устройств-> правой кнопкой мыши щёлкните на неизвестное устройство -> Свойства -> Подробности.
Теперь, из выпадающего меню выберите путь к Экземпляру Устройства (Windows 7)/ код Экземпляра Устройства (Windows XP)
Это даст вам строковое значение, которое содержит идентификатор vendor ID и Device ID. Строка такая:
PCIVEN_1180&DEV_0592И SUBSYS_02BE1028&REV_124&31FC8C23&0&0BF0
где VEN_1180-vendor ID и DEV_0592 является идентификатор Устройства. Запишите их оба.
Теперь, перейдите к PCI База данных на сайте http://www. pcidatabase.com/,централизованная база данных поддерживаемых PCI-Идентификаторов устройств.
Введите ID в текстовое поле,как показано выше, и нажмите на кнопку Поиск — Search.Вы должны быть в состоянии получить сведения об этом устройстве.Поставщика этого устройства,имя или наименование предприятия-изготовителя,посетите веб-сайт поддержки для поиска и загрузки последней версии драйвера устройства для соответствующего драйвера устройства.
В случае, если вы не можете найти информацию на PCI базе данных, вы можете попробовать альтернативные веб-сайты — http://www.pcisig.com/membership/vid_search/ или http://pciids.sourceforge.net/
2. Unknown Device identifier-идентификатор программного обеспечения
Unknown Device Identifier позволяет вам определять жёлтый вопросительный знак с надписью Неизвестное устройство в Диспетчере Устройств. И сообщает, что вам подробное резюме об имени производителя,OEM имя,тип устройства,модель и даже точное имя неизвестного устройства. Собранной информацией, вы можете обратиться к производителю оборудования для поддержки или ищите в Интернете соответствующий драйвер с помощью простого щелчка. С помощью этой утилиты, вы, возможно, сразу конвертируете ваши неизвестные устройства на определенных известных устройствах и найдёте нужный драйвер в Интернете и свяжетесь с производителем устройства или аппаратного обеспечения.Известные устройства распознаются Microsoft Windows и будут также анализироваться независимо от операционной системы.
— Определить устройства USB 1.1/2.0/3.0
— Идентифицировать устройства IEEE 1394
— Определить устройства ISA Plug&Play
— Идентификация устройств на шине AGP/PCIe
— Определить устройства PCI, PCI-E, eSATA
— Многоязычный интерфейс: русский,английский, французский
— Поиск драйверов для устройств
— Обратиться к оборудованию непосредственно Вендер
— Сохранить или распечатать информацию об оборудовании
3.Утилита Unknown Devices
Утилита Unknown Devices помогает пользователям найти то,что в диспетчере устройств описано как неизвестное устройство,и какое оно есть на самом деле. Проверив Device Manager для неизвестных устройств и извлечения из него информации, программа пытается выяснить,какое это устройство,так что пользователям не придется открывать корпус ПК или искать случайные числа off карт PCI, чтобы выяснить её модель.
Утилита Unknown Devices поддерживает Windows XP, Windows 2003 (но не Windows NT), бета-версиет поддерживает,возможно, Windows 7.Утилита Unknown Devices портативная и не требует установки, поэтому она прекрасно работает с компакт-диска или флешки. Утилита Unknown Devices доступна для бесплатного скачивания.
[share-locker locker_id=»de80732ce9da1c941″ theme=»blue» message=»Если Вам понравилась эта статья,нажмите на одну из кнопок ниже.СПАСИБО!» facebook=»true» likeurl=»CURRENT» vk=»true» vkurl=»CURRENT» google=»true» googleurl=»CURRENT» tweet=»true» tweettext=»» tweeturl=»CURRENT» follow=»true» linkedin=»true» linkedinurl=»CURRENT» ][/share-locker]
- Автор: Данил
- Распечатать
Оцените статью:
(2 голоса, среднее: 5 из 5)
Поделитесь с друзьями!
Определение уникального идентификатора устройства
Применяется к: ,
В разделе Управление устройствами > Разрешенные устройства профиля рабочих станций и серверов вы можете добавить компьютеры и устройства в вашей сети, использование которых вы хотите разрешить без ограничений. Сведения о том, как добавить разрешенные устройства, см. в разделе Настройка контроля устройств (компьютеры Windows).
Если устройство, которое вы хотите разрешить, не было подключено к компьютеру пользователя, оно не отображается в диалоговом окне «Добавить устройства». Вы можете импортировать идентификатор устройства, чтобы разрешить использование.
Чтобы определить уникальный идентификатор устройства и создать файл импорта:
- Откройте Диспетчер устройств Windows.
- Выберите устройство, для которого вы хотите получить идентификатор.
- Щелкните правой кнопкой мыши имя устройства и выберите Свойства .
- Выберите вкладку Подробности .
- В раскрывающемся списке Свойство выберите Путь к экземпляру устройства .
В поле Значение отображается уникальный идентификатор устройства. Если в пути к экземпляру устройства не отображается значение, вы не можете получить идентификатор устройства. Вместо этого вы можете использовать идентификатор оборудования устройства для его идентификации.
- Чтобы отобразить идентификатор оборудования устройства, в раскрывающемся списке Свойство выберите Идентификаторы оборудования .
- В текстовом файле добавьте идентификаторы устройств, которые вы хотите разрешить.
Чтобы импортировать список идентификаторов устройств, которым вы хотите разрешить доступ:
- В WatchGuard Cloud выберите Настройка > Конечные точки .
- Выберите Настройки .
- На левой панели выберите Рабочие станции и серверы .
- Выберите существующий профиль параметров безопасности для редактирования, скопируйте существующий профиль или в правом верхнем углу окна нажмите Добавить , чтобы создать новый профиль.
Откроется страница "Добавить настройки" или "Редактировать настройки".
- Введите Имя и Описание для профиля, если требуется.
- Выберите Управление устройством .
- Включите переключатель Включить управление устройствами .
- В разделе Разрешенные устройства щелкните меню параметров и выберите Импорт .
- Выберите файл и нажмите Импорт .
- Щелкните Сохранить .
Похожие темы
Настройка управления устройствами (компьютеры Windows)
vb.net - Управление системой - Найти путь к экземпляру устройства
спросил
Изменено 1 год, 9 месяцев назад
Просмотрено 158 раз
Код, который я пытался преобразовать из кода C#
в код VB. Net
, прилагается.
Мне удалось добавить заголовки в ListView.
Мне не удалось получить значения DeviceID
и Caption
.
Внутри кода есть петля. Поскольку я преобразовал код из кода C#
в код VB.Net
с помощью конвертера, могут быть недостатки. Где я делаю ошибку или чего не хватает в этом коде? Я просто не мог добиться успеха.
Найти путь к экземпляру устройства:
Система импорта Импортирует System.Collections Импортирует System.Management Импортирует System.Collections.Generic Импортирует System.Windows.Forms Форма публичного класса1 Private Sub Form1_Load (отправитель как объект, e как EventArgs) обрабатывает MyBase.Load ComboBox1.SelectedItem = "Win32_PnPEntity" Конец сабвуфера # Отключить предупреждение CA1822 Private Sub InsertInfo (ByVal Key As String, ByRef lst As ListView, ByVal DontInsertNull As Boolean) #Включить предупреждение CA1822 лст.Элементы.Очистить() Затемнить искатель As ManagementObjectSearcher = New ManagementObjectSearcher(("выберите DeviceID, Caption из " + Key)) Пытаться Для каждой акции как ManagementObject в searcher. Get Dim grp As ListViewGroup Пытаться grp = lst.Groups.Add(доля("Имя").ToString, доля("Имя").ToString) Поймать как System.Exception grp = lst.Groups.Add(share.ToString, share.ToString) Завершить попытку Если доля.Свойства.Количество <= 0 Тогда MessageBox.Show("Информация отсутствует", "Нет информации", MessageBoxButtons.OK, MessageBoxIcon.Information) Возвращаться Конец, если Для каждого ПК как PropertyData в share.Properties Затемнение элемента As ListViewItem = New ListViewItem (grp) Если (lst.Items.Count Mod 2) <> 0 Тогда item.BackColor = Цвет.Белый Еще item.BackColor = Color.WhiteSmoke Конец, если item.Text = ПК.Имя Если PC.Value IsNot Nothing AndAlso PC. Value.ToString <> "" Тогда Выберите вариант PC.Value.GetType.ToString Случай "System.String[]" Dim str() As String = CType(PC.Value, String()) Dim str2 As String = "" Dim St As String Для каждой ул. In ул. ул2 += (ст + "") Следующий item.SubItems.Добавить (str2) Случай "System.UInt16[]" Dim shortData() As System.UInt16 = CType(PC.Value, System.UInt16()) Dim tstr2 As String = "" Для каждого st As System.UInt16 In shortData tstr2 += (st.ToString + "") Следующий item.SubItems.Добавить (tstr2) Дело еще item. SubItems.Add(PC.Value.ToString) Конец выбора ElseIf Not DontInsertNull Then item.SubItems.Add("Информация отсутствует") Еще 'ТОДО: Внимание!!! продолжить Остальное Конец, если lst.Items.Add(элемент) Следующий Следующий Поймать опыт как исключение MessageBox.Show(("невозможно получить данные из-за следующей ошибки " & vbLf + exp.Message), "Error", MessageBoxButtons.OK, MessageBoxIcon.Information) Завершить попытку Конец сабвуфера Private Shared Sub RemoveNullValue (ByRef ListView1 As ListView) Для каждого элемента Как ListViewItem В ListView1.Items Если (item.SubItems(1).Text = "Информация отсутствует") Тогда элемент.Удалить() Конец, если Следующий Конец сабвуфера Private Sub CheckBox1_CheckedChanged(sender As Object, e As EventArgs) обрабатывает CheckBox1.