Скрытие устройств из диспетчер устройств
По умолчанию диспетчер устройств отображает состояние каждого устройства на компьютере. В некоторых ситуациях может потребоваться запретить появление определенных устройств в диспетчер устройств. Например, системная плата может иметь контроллер CardBus с слотом, который недоступен пользователю. Так как пользователь не может использовать слот, вы не хотите, чтобы диспетчер устройств отображали какие-либо сведения об устройстве.
Чтобы скрыть устройство в диспетчер устройств, его можно пометить как скрытое. Как правило, диспетчер устройств не отображает скрытые устройства. (Обратите внимание, что пользователи могут переопределить этот параметр и отобразить все устройства в диспетчер устройств, даже скрытые. Дополнительные сведения о том, как переопределить этот параметр, см. в разделе Просмотр скрытых устройств.)
Существует два способа пометить устройство как скрытое: в драйвере устройства или с помощью ACPI BIOS.
Скрытие устройств в драйвере
Драйверы имеют два способа пометить драйвер как скрытый:
Драйвер функции или драйвер фильтра функций может попросить операционную систему скрыть успешно запущенное устройство, отвечая на IRP_MN_QUERY_PNP_DEVICE_STATE IRP. При поступлении IRP драйвер должен задать для бита PNP_DEVICE_DONT_DISPLAY_UI в IoStatus.Informationзначение TRUE в процедуре диспетчеризации драйвера.
В Windows XP и более поздних версиях операционных систем Windows драйвер шины или драйвер фильтра шины могут скрыть любое устройство, запущенное или иным образом, отвечая на запрос IRP_MN_QUERY_CAPABILITIES IRP. При поступлении IRP драйвер должен задать для элемента Parameters.DeviceCapabilities.NoDisplayInUIзначение TRUE в процедуре диспетчеризации драйвера. В некоторых случаях драйверу фильтра шины может потребоваться задать этот бит в подпрограмме завершения. Этот дополнительный шаг необходим, если подпрограмма диспетчеризации базового водителя автобуса неправильно очищает все поля возможностей, заданные другими водителями.
Скрытие устройств с помощью BIOS ACPI
В BIOS ACPI можно пометить устройство как скрытое. BIOS может предоставлять _STA метод для устройства. Метод _STA возвращает битовую маску. Бит 2 (маска 0x4) указывает, должно ли диспетчер устройств по умолчанию отображать устройство. Этот бит должен иметь значение 1, если устройство должно быть видимым, и 0 в противном случае.
Например, в следующем примере кода показано, как будет скрыт КОНТРОЛЛЕР USB в корневой шине.
Device(PCI0) // Root PCI bus
_HID *PNP0A03
...
Device(UCTL) // USB controller
_ADR 0xddddffff // dddd = device, ffff = function
_STA 0xB // Device present, but not shown
В Microsoft Windows 2000 можно скрыть только запущенные рабочие устройства. В Windows XP и более поздних версиях Windows можно также скрыть неисправные устройства. Бит 3 (маска 0x8), возвращаемый методом _STA, указывает, правильно ли работает устройство. Этот бит равен 1, если устройство работает правильно, а в противном случае — 0. Например, в следующем примере кода показано, как BIOS указывает, что USB-контроллер не работает и должен быть скрыт:
Device(PCI0) // Root PCI bus
_HID *PNP0A03
...
Device(UCTL) // USB controller
_ADR 0xddddffff // dddd = device, ffff = function
_STA 0x3 // Present, but broken and not shown
Примечание Бит декодирования (0x2) не имеет никакого отношения к устройствам, описанным с помощью методов _ADR. Предыдущие примеры кода также работают без набора битов декодирования. Модули записи BIOS должны отслеживать состояние декодирования только для устройств, описанных с помощью _HID методов.