Запись «Virtual HID Minidriver Collection» в Диспетчере устройств или в отчёте об ошибках драйвера указывает на то, что в системе зарегистрировано виртуальное HID-устройство, созданное программным минидрайвером поверх фреймворка Virtual HID Framework (VHF) в Windows. Такая запись появляется, когда приложение эмулирует клавиатуру, мышь, геймпад или сенсорную панель без физического оборудования — например, утилиты удалённого управления, программы переназначения кнопок или тестовые стенды разработчиков.
Для разработчика эта тема означает другое: создание собственного виртуального HID-устройства через KMDF-драйвер, который регистрирует одну или несколько коллекций (collections) в стеке HID. Ниже разберём оба сценария — и что означает устройство в системе, и как устроен минидрайвер, и что проверять при ошибках.
Что такое HID и зачем нужны виртуальные устройства
HID (Human Interface Device) — стандартный класс устройств ввода: клавиатуры, мыши, джойстики, тачскрины, пульты. Windows обрабатывает их через единый стек драйверов: классовый драйвер hidclass.sys, парсер отчётов и транспортные минидрайверы (USB, Bluetooth, I2C).
Виртуальное HID-устройство не имеет физического транспорта. Вместо него данные формирует программный драйвер. Это нужно, когда требуется:
- 🖱️ эмулировать ввод — например, «программная мышь» для систем удалённого доступа;
- 🎮 представить ПО как геймпад или клавиатуру для игр и приложений;
- 🧪 тестировать HID-стек и приложения без реального железа;
- 🔌 пробросить нестандартное устройство в систему как стандартный HID, чтобы не писать отдельный драйвер верхнего уровня.
Ключевая выгода: приложения видят такое устройство как обычный HID и работают с ним через стандартные API, без специальных интеграций.
Архитектура: VHF и роль минидрайвера
Начиная с Windows 10, Microsoft предоставляет фреймворк Virtual HID Framework (VHF), реализованный в библиотеке vhf.sys. Он избавляет разработчика от необходимости писать полноценный HID-минидрайвер вручную: достаточно создать KMDF-драйвер, который вызывает функции VHF и передаёт ему дескриптор отчёта (HID Report Descriptor).
Термин collection (коллекция) относится к внутренней структуре HID-дескриптора. Один дескриптор может описывать несколько топ-level коллекций — например, одно физическое устройство, представленное системе одновременно как клавиатура и как мышь. Каждая коллекция становится отдельным дочерним устройством (PDO) в дереве устройств, и именно эти записи вы видите в Диспетчере устройств.
Как создаётся виртуальное HID-устройство: общий порядок
Полный код драйвера зависит от задачи, но последовательность инициализации через VHF стабильна и описана в документации Microsoft для разработчиков. Общий порядок такой:
- 📄 подготовить корректный HID Report Descriptor, описывающий формат отчётов устройства;
- ⚙️ в обработчике
EvtDriverDeviceAddинициализировать конфигурацию VHF черезVHF_CONFIG_INIT; - 🆕 вызвать
VhfCreateдля создания объекта виртуального HID-устройства; - ▶️ запустить устройство вызовом
VhfStart— после этого коллекции появляются в системе; - 📤 отправлять входные отчёты через
VhfReadReportSubmitпо мере поступления данных.
Пример скелета инициализации в упрощённом виде:
VHF_CONFIG vhfConfig;
VHF_CONFIG_INIT(&vhfConfig,
WdfDeviceGetIoTarget(device),
reportDescriptor,
reportDescriptorLength);
status = VhfCreate(&vhfConfig, &vhfHandle);
if (NT_SUCCESS(status)) {
status = VhfStart(vhfHandle);
}
⚠️ Внимание: драйверы режима ядра требуют действующей цифровой подписи. Неподписанный или тестово подписанный драйвер загрузится только при включённом тестовом режиме Windows, что снижает защиту системы. Не отключайте проверку подписи на рабочей машине постоянно.
☑️ Проверка перед запуском виртуального HID-драйвера
Типичные ошибки и их диагностика
Самая частая проблема — устройство с жёлтым восклицательным знаком в Диспетчере устройств и кодом ошибки в свойствах. Точный код зависит от ситуации, поэтому первым шагом откройте свойства устройства и посмотрите поле «Состояние устройства» — именно код указывает направление диагностики.
Возможные причины сбоев стоит проверять в таком порядке:
- 🔍 некорректный дескриптор отчёта — устройство создаётся, но коллекции не перечисляются; проверьте дескриптор официальными инструментами валидации HID;
- 🔐 проблема с подписью драйвера — драйвер не загружается, в журнале событий системы фиксируется отказ;
- 🧩 конфликт ПО — несколько программ эмуляции ввода могут создавать конкурирующие виртуальные устройства;
- 🗑️ «осиротевшее» устройство — запись осталась после удаления программы, создавшей её; помогает удаление устройства в Диспетчере с перезагрузкой.
Для просмотра системных событий используйте «Просмотр событий» (eventvwr.msc), раздел «Журналы Windows → Система», фильтр по источникам, связанным с драйверами и PnP.
Сравнение подходов к созданию виртуальных устройств
VHF — не единственный способ эмуляции ввода. Выбор зависит от задачи, уровня доступа и требований к совместимости:
| Подход | Уровень | Когда подходит | Ограничения |
|---|---|---|---|
| VHF (vhf.sys) | Ядро, KMDF | Полноценное виртуальное HID-устройство | Нужна подпись драйвера |
| SendInput / keybd_event | Пользовательский | Простая эмуляция клавиш и мыши | Не создаёт отдельное устройство |
| Классический HID-минидрайвер | Ядро | Старые версии Windows без VHF | Существенно сложнее в разработке |
| Готовые драйверы эмуляции | Ядро | Типовые задачи (геймпад, ввод) | Ограниченная гибкость |
Если цель — просто отправлять нажатия клавиш из своего приложения, полноценный драйвер не нужен: достаточно пользовательского API вроде SendInput. Драйвер оправдан, когда устройство должно существовать в системе независимо от приложения и быть видимым другим программам как настоящее HID-оборудование.
Безопасность и удаление виртуальных устройств
Виртуальное HID-устройство способно генерировать ввод от имени пользователя, поэтому к источнику такого драйвера стоит относиться внимательно. Устанавливайте подобное ПО только от проверенных разработчиков: вредоносная программа с виртуальной клавиатурой может вводить команды без вашего участия.
⚠️ Внимание: если устройство «Virtual HID» появилось в системе без установки вами соответствующего ПО (утилит эмуляции, удалённого доступа, игровых программ), проверьте список установленных приложений и выполните проверку системы антивирусом.
Чтобы удалить ненужное виртуальное устройство, откройте Диспетчер устройств, найдите запись в разделе «Устройства HID» (или с похожим именем), выберите «Удалить устройство» и перезагрузите систему. Если запись возвращается — значит, её пересоздаёт установленная программа, и удалять нужно именно её.
Как узнать, какая программа создала виртуальное HID-устройство
Откройте свойства устройства в Диспетчере устройств и посмотрите вкладки «Сведения» — свойства «Поставщик драйвера», «INF-файл» и «Соответствующие коды оборудования» часто указывают на разработчика. Дополнительно проверьте список установленных программ по дате, совпадающей с датой установки драйвера.
Часто задаваемые вопросы
Virtual HID Minidriver Collection — это вирус?
Сама по себе запись не является вредоносной: так отображаются легитимные виртуальные устройства ввода от программ эмуляции, удалённого доступа и разработки. Насторожить должно лишь появление устройства без установки соответствующего ПО — в этом случае проверьте систему антивирусом.
Можно ли удалить это устройство?
Да, через Диспетчер устройств. Но если устройство нужно работающей программе (например, эмулятору геймпада), оно будет создано заново при следующем запуске этой программы.
Нужна ли подпись для собственного VHF-драйвера?
Да. Драйверы режима ядра в современных версиях Windows загружаются только с действующей подписью. Для разработки используется тестовая подпись и тестовый режим на отдельной машине.
Чем VHF отличается от обычного HID-минидрайвера?
VHF берёт на себя взаимодействие с HID-стеком: разработчик лишь передаёт дескриптор и отчёты. Классический минидрайвер требует самостоятельной обработки IOCTL-запросов HID-класса, что значительно сложнее.
Почему одно устройство отображается как несколько записей?
Если дескриптор отчёта описывает несколько топ-level коллекций (например, клавиатуру и мышь одновременно), система создаёт отдельное дочернее устройство для каждой коллекции. Это штатное поведение HID-стека.