Hiding Devices from Device Manager
By default, Device Manager shows the state of every device on a computer. In some situations, you might want to prevent certain devices from appearing in Device Manager. For example, a motherboard might have a CardBus controller with a slot that is not user-accessible. Because the user cannot use the slot, you do not want Device Manager to display any information about the device.
To hide a device in Device Manager, you can mark the device as a hidden device. Typically, Device Manager does not display hidden devices. (Note, however, that users can override this setting and display all devices within Device Manager, even hidden ones. For more information about how to override this setting, see Viewing Hidden Devices.)
There are two ways to mark your device as hidden: within the device’s driver or by using the ACPI BIOS.
Hiding Devices from Within a Driver
Drivers have two ways to mark a driver as hidden:
A function driver or function filter driver can ask the operating system to hide a successfully started device by responding to the IRP_MN_QUERY_PNP_DEVICE_STATE IRP. When the IRP arrives, the driver must set the PNP_DEVICE_DONT_DISPLAY_UI bit in IoStatus.Information to TRUE in the driver’s dispatch routine.
On Windows XP and later versions of the Windows operating systems, a bus driver or bus filter driver can hide any device, started or otherwise, by responding to the IRP_MN_QUERY_CAPABILITIES IRP. When the IRP arrives, the driver must set the Parameters.DeviceCapabilities.NoDisplayInUI member to TRUE in the driver’s dispatch routine. In some cases, a bus filter driver might have to set this bit in a completion routine. This extra step is required when the underlying bus driver’s dispatch routine incorrectly clears all capability fields that other drivers set.
Hiding Devices By Using the ACPI BIOS
You can mark a device as hidden in the ACPI BIOS. The BIOS can expose a _STA method for the device. The _STA method returns a bitmask. Bit 2 (mask 0x4) specifies whether Device Manager should make the device visible by default. This bit should be 1 if the device should be made visible and 0 otherwise.
For example, the following code example shows how a USB controller on the root bus would be hidden.
In Microsoft Windows 2000, you can hide only started, working devices. In Windows XP and later versions of Windows, you can also hide broken devices. Bit 3 (mask 0x8) that is returned by the _STA method indicates whether a device is working properly. This bit is 1 if the device is working properly and is 0 otherwise. For example, the following code example shows how a BIOS would indicate a USB controller is broken and should be hidden:
NoteВ В The «decoding» bit (0x2) does not have any relevance for devices that are described through _ADR methods. The previous code examples also work without the decoding bit set. BIOS writers must track the decoding state only for devices that are described through _HID methods.
Viewing Hidden Devices
Device Manager lists the devices that are installed in the computer. By default, certain devices are not shown in the list. These hidden devices include:
Devices that have the device node (devnode) status bit DN_NO_SHOW_IN_DM set.
There is a devnode for each device on a machine and the devnodes are organized into a hierarchical Device Tree. The PnP manager creates a devnode for a device when the device is configured.
A devnode contains the device stack (the device objects for the device’s drivers) and information about the device such as whether the device has been started and which drivers have registered for notification on the device.
Devices that are part of a setup class that is marked as a NoDisplayClass in the registry (for example, printers and non-PnP drivers)
Devices that were physically removed from the computer but whose registry entries were not deleted (also known as nonpresent devices).
Starting with WindowsВ 8 and Windows ServerВ 2012, the Plug-and-Play Manager no longer creates device representations for non-PnP (legacy) devices. Thus there are no such devices to view in the Device Manager.
Users should never have to view nonpresent devices because a nonpresent device should not have their attention and should not cause any problems. If a user has to view your device when it is not present, there is likely a problem with your driver design. However, during testing, a developer might have to view such devices.
To include hidden devices in Device Manager display, select View and select Show hidden devices.
Prior to Windows 8, to view nonpresent devices, you must set the environment variable DEVMGR_SHOW_NONPRESENT_DEVICES to 1 before you open Device Manager, then open Device Manager, and on the View menu, select Show hidden devices.
To permanently set the user environment variable DEVMGR_SHOW_NONPRESENT_DEVICES to 1, use the Advanced tab of the system property sheet. After you set this environment variable, run Device Manager and select Show hidden devices.
Диспетчер устройств не отображает неподключенные устройства
Проблема
При выборе пункта Показать скрытые устройства в меню Вид в диспетчере устройств отображаются только устройства, драйверы и принтеры, не являющиеся самонастраиваемыми. Установленные, но не подключенные к компьютеру устройства (такие как устройства USB или устройства-призраки) не отображаются в диспетчере устройств даже после выбора пункта Показать скрытые устройства.
Обходной путь
Чтобы обойти эту проблему и добиться отображения отключенных устройств при выборе пункта Показать скрытые устройства, сделайте следующее.
Windows 8 и более поздние версии: перейдите к шагу 3.
Windows 7 и более ранние версии: начните с шага 1.
Нажмите кнопку Пуск и последовательно выберите пункты Все программы,
Стандартные и Командная строка.
В командной строке введите указанную ниже команду и нажмите клавишу ВВОД:
Windows 8 и более поздние версии. В меню пуск выполните поиск по словам «диспетчер устройств» и в результатах поиска выберите «Диспетчер устройств».
Windows 7 и более ранние версии. Введите в командной строке следующую команду и нажмите клавишу ВВОД:
Устранение неполадок устройств и драйверов в диспетчере устройств.
Примечание. Чтобы отобразить устройства, не подключенные к компьютеру, выберите пункт Показать скрытые устройства в меню Вид диспетчера устройств.
После устранения неполадок закройте диспетчер устройств.
Введите exit, чтобы закрыть командную строку.
Примечание. В Windows 7 и более ранних версий после закрытия окна командной строки Windows сбрасывает переменную devmgr_show_nonpresent_devices=1, заданную в шаге 2, и устройства-призраки перестают отображаться при выборе пункта Показать скрытые устройства.
Разработчики или опытные пользователи, которые хотят, чтобы неподключенные к компьютеру устройства отображались в диспетчере устройств, могут установить эту переменную окружения глобально:
Щелкните правой кнопкой мыши значок Мой компьютер.
Выберите пункт Свойства.
Перейдите на вкладку Дополнительно.
Откройте вкладку Переменные среды.
Задайте значения переменных в поле Системные переменные.
Примечание. Используйте этот способ только для устранения неполадок или во время разработки, а также для исключения возможности случайного удаления пользователем необходимого устройства, не подключенного к компьютеру (например, устройства USB или стыковочной станции, не подключенной к ноутбуку).
Дополнительная информация
Помимо отображаемых устройств, в диспетчере устройств есть два типа скрытых устройств:
Обычные скрытые устройства, которые не отображаются (драйверы, принтеры и другие устройства, не поддерживающие технологию Plug and Play)
Устройства-призраки, которые не подключены к компьютеру
Отображение скрытого оборудования в Диспетчере устройств
Один из самых странных недостатков XP, связанных с оборудованием, – это наличие «призрачных» и скрытых устройств, которые не отображаются в Диспетчере устройств, но могут стать причиной системного конфликта. Осуществить диагностику такого конфликта будет невозможно даже с использованием Диспетчера устройств.
В Диспетчере существует несколько типов скрытых устройств. Во-первых, в нем не отображаются принтеры, драйверы и прочие устройства, не поддерживающие Plug and Play. Эта проблема актуальна только для тех, у кого установлена устаревшая аппаратура, потому что устройства Plug and Play распознаются и устанавливаются в XP автоматически. Если же устройство не поддерживает этот стандарт, оно может быть подключено к компьютеру, но в Диспетчере устройств отображаться не будет.
Во-вторых, существуют так называемые «отсутствующие» или «призрачные» устройства – то есть оборудование, отключенное без деинсталляции, а также устройства, процедура удаления которых прошла некорректно. Они физически отсутствуют в системе, но XP считает, что они еще подключены, и выделяет на них системные ресурсы. Например, если просто удалить старую сетевую карту без деинсталляции, это может привести к конфликтам IP-адреса и другим подобным проблемам, потому что XP будет воспринимать эту карту как продолжающую присутствовать в системе.
В Диспетчере устройств также могут не отображаться временные устройства USB, которые часто подключаются и отключаются от компьютера, например MP3-плееры, которые подключаются только для удаления или загрузки новых файлов. Даже когда подобные устройства отключены, XP продолжает выделять на них системные ресурсы. Поэтому при замене одного устройства USB на другое той же модели лучше провести деинсталляцию.
Кроме того, бывают устройства, перемещенные из одного разъема в другой. XP иногда воспринимает их как подключенные к обоим разъемам и направляет системные ресурсы на оба.
Обнаружение этих скрытых устройств может значительно облегчить диагностику проблем. Например, скрытое устройство может конфликтовать с видимым, а иногда нужно просто деинсталлировать скрытое оборудование – допустим, при перемещении сетевой карты, не поддерживающей Plug and Play, из одного разъема в другой. Но для этого нужно заставить Диспетчер устройств показывать всё скрытое оборудование, иначе решить проблему будет затруднительно.
Заставить Диспетчер устройств показывать принтеры, драйверы и прочие устройства, не поддерживающие Plug and Play, довольно легко. Чтобы запустить Диспетчер, наберите в командной строке devmgmt.msc и нажмите [Enter], а затем выберите пункт меню «Вид | Показать скрытые устройства» (View | Display Hidden Devices).
Включить отображение «призрачных» или отсутствующих устройств несколько сложнее. Для этого нужно задать системную переменную среды, которая заставит Диспетчер устройств показывать такое оборудование. Чтобы это сделать, нажмите правой кнопкой мыши на значке «Мой компьютер» (My Computer) и выберите пункт меню «Свойства | Дополнительно | Переменные среды» (Properties | Advanced | Environment Variables). Появится диалоговое окно «Переменные среды» (Environment Variable), в котором можно создавать переменные среды для всей системы и для отдельных ее пользователей. Переменные среды определяют различные параметры операционной системы – например, размещение каталогов Windows и TEMP, а также имя файла и адрес командного процессора, который запускается при вызове командной строки.
Диалоговое окно «Переменные среды» разделено на две части: «Переменные среды пользователя» (User variables) и «Системные переменные» (System variables). Чтобы создать переменную среды для отдельного пользователя, используйте диалоговое окно «Переменные среды пользователя»; для создания системной переменной обратитесь к диалоговому окну «Системные переменные». В нашем случае необходимо создать переменную среды для всей системы, поэтому кнопку «Создать» (New) следует нажимать в разделе «Системные переменные». При нажатии на эту кнопку появится диалоговое окно «Новая системная переменная» (New System Variable). В поле «Имя переменной» (Variable name) введите devmgr_show_nonpresent_devices. Кроме имени, переменной нужно присвоить еще и значение. Чтобы включить отображение отсутствующего оборудования в Диспетчере устройств, укажите в поле «Значение переменной» (Variable value) цифру 1. Заполненное диалоговое окно показано на рис. 13-3. После этого нажмите «OK», чтобы завершить создание новой переменной, и «OK», чтобы закрыть диалоговое окно «Переменные среды».
Итак, системная переменная среды создана. Но для того чтобы «призрачные» устройства появились в Диспетчере, его сначала нужно соответствующим образом настроить. Для этого запустите Диспетчер из командной строки или из окна «Выполнить» (Run) командой devmgmt.msc и нажмите [Enter]. Затем выберите пункт меню «Вид | Показать скрытые устройства». После этого отсутствующие устройства появятся в списке, как показано на рис. 13-4. Список устройств должен значительно удлиниться, потому что в нем появятся драйверы, не поддерживающие Plug and Play. Как правило, устройства, не подключенные к компьютеру, выделены серым цветом, в то время как установленные устройства – черным. Некоторые устройства могут встречаться в списке несколько раз, как показано на рис. 13-4.
Теперь Диспетчер устройств можно использовать для диагностики и решения проблем, вызванных «призрачными» устройствами, о чем подробно рассказывается в статье «Анализ сообщений об ошибках Диспетчера устройств для устранения аппаратных проблем» (Troubleshoot Hardware by Decoding Device Manager Error Messages). При обнаружении «призрачных» устройств, которые уже не используются на этом компьютере, удалите их с помощью Диспетчера устройств. Для этого нужно нажать на устройстве правой кнопкой мыши и выбрать пункт меню «Удалить» (Uninstall).
Временное отображение отсутствующих устройств
Если вам не нужно, чтобы отсутствующее оборудование отображалось в Диспетчере устройств постоянно, и вы не хотите задавать новую переменную среды, можно создать временную переменную – например, только для одного запуска Диспетчера. Для этого введите в командной строке devmgr_show_nonpresent_devices=1 и нажмите [Enter]. Никакого результата выполнения команды показано не будет – окно командной строки останется пустым. В этом же окне введите start devmgmt.msc и нажмите [Enter]. После этого в новом окне запустится Диспетчер устройств. Теперь включите отображение скрытых устройств точно так же, как делали до этого.
Имейте в виду: Диспетчер устройств в этом случае следует запускать из той же копии командной строки, что и команду devmgr_show_nonpresent_devices=1. Если запустить его другим способом, «призрачные» устройства отображаться не будут.
Автор: Preston Gralla
Перевод: SVET
Оцените статью: