Установка устаревших или неподписанных драйверов в 64-битных операционных системах Windows 10 и Windows 11 блокируется встроенной службой защиты Kernel Mode Code Signing (KMCS) и механизмом Driver Signature Enforcement (DSE). Основная техническая проблема заключается в жестком требовании 64-битного ядра NT к наличию валидной цифровой подписи Cross-Certificate, а также в аппаратно-программной невозможности выполнения 32-битного бинарного кода режима ядра (файлов .sys) внутри 64-битного адресного пространства. Данное руководство содержит исчерпывающие инженерные методы обхода подписи, коррекции .inf-скриптов и проброса оборудования для успешного запуска legacy-устройств.
Первичная диагностика и подготовка
- Проверьте статус устройства в оснастке
devmgmt.mscна наличие ошибок: Ошибка 52 (Code 52) указывает на отсутствие или недействительность цифровой подписи, Ошибка 28 (Code 28) — на отсутствие драйвера, Ошибка 39 (Code 39) — на попытку загрузки несовместимого бинарного файла ядра. - Распакуйте дистрибутив драйвера с помощью архиватора 7-Zip и проверьте структуру каталога: в нем обязательны файлы манифеста
.inf, а также бинарные компоненты.sys,.dllили.cat. - Определите тип драйвера: если файл
.sysскомпилирован исключительно под архитектуру x86 (32-бит), прямой запуск его кода в ядре x64 невозможно выполнить без средств виртуализации. Если 32-битным является только установщик (setup.exe,dpinst.exe), драйвер может быть развернут вручную. - Проверьте режим работы UEFI: для применения глобальных изменений в конфигурации загрузки BCD потребуется отключить параметр Secure Boot в настройках BIOS/UEFI материнской платы.
Основные пошаговые методы установки
-
Метод 1: Временное отключение проверки цифровой подписи через параметры загрузки
Этот способ позволяет однократно отключить механизм DSE для установки неподписанного драйвера в текущей сессии ОС.
В Windows 10/11 откройте консоль от имени Администратора и выполните команду немедленного перехода в среду восстановления:
shutdown.exe /r /o /f /t 0Альтернативный путь через графический интерфейс:
В Windows 10: Параметры → Обновление и безопасность → Восстановление → Особые варианты загрузки → Перезагрузить сейчас.
В Windows 11: Параметры → Система → Восстановление → Расширенные параметры загрузки → Перезагрузить сейчас.
После перезагрузки последовательно выберите пункты меню: Поиск и устранение неисправностей (Troubleshoot) → Дополнительные параметры (Advanced options) → Параметры загрузки (Startup Settings) → Перезагрузить (Restart).
На экране выбора параметров нажмите клавишу 7 или F7 для активации пункта Отключить обязательную проверку цифровой подписи драйверов (Disable driver signature enforcement).
После загрузки ОС откройте
devmgmt.msc, нажмите правой кнопкой мыши на целевое устройство, выберите Обновить драйвер → Найти драйверы на этом компьютере → Обзор, укажите папку с.inf-файлом и подтвердите установку в окне предупреждения системы безопасности. -
Метод 2: Включение тестового режима Windows (Test Mode) и отключение проверок BCD
Метод используется для постоянной работы с неподписанными драйверами. Требует отключенного Secure Boot в UEFI.
Запустите командную строку
cmd.exeот имени Администратора.Последовательно выполните команды конфигурации хранилища BCD:
bcdedit.exe /set loadoptions DISABLE_INTEGRITY_CHECKSbcdedit.exe /set testsigning onПерезагрузите компьютер. В нижнем правом углу рабочего стола появится надпись «Тестовый режим / Test Mode».
Выполните принудительное добавление драйвера в системное хранилище (Driver Store) через утилиту PNPUtil:
pnputil.exe /add-driver "C:PathToDriverdriver.inf" /install -
Метод 3: Настройка локальной групповой политики подписи драйверов
Запустите оснастку управления политиками комбинацией клавиш Win + R и вводом
gpedit.msc.Перейдите по пути: Конфигурация пользователя → Административные шаблоны → Система → Установка драйвера (User Configuration → Administrative Templates → System → Driver Installation).
Двойным кликом откройте параметр Цифровая подпись драйверов устройств (Code signing for device drivers).
Установите значение Включено (Enabled), а в нижнем выпадающем меню выбора реакции системы на неподписанный драйвер установите Пропустить (Ignore).
Нажмите Применить и ОК. Обновите политики в консоли командой
gpupdate /force. -
Метод 4: Модификация секций INF-файла для интеграции 32-битных описаний в x64
Если инсталлятор выдает ошибку о несоответствии платформы, откройте файл
.infв текстовом редакторе Notepad.Найдите секцию
[Manufacturer]. Обычно в 32-битных драйверах указана строка вида:%DeviceName% = DeviceInstall, NTx86Дополните определение производителем поддержкой целевой архитектуры
NTamd64, изменив строку следующим образом:%DeviceName% = DeviceInstall, NTx86, NTamd64Продублируйте блок секции установки с суффиксом целевой платформы. Если в файле присутствует секция
[DeviceInstall.NTx86], скопируйте ее целиком и присвойте копии имя:[DeviceInstall.NTamd64]Повторите процедуру дублирования для всех связанных директив:
[DeviceInstall.NTamd64.Services]и[DeviceInstall.NTamd64.HW].Удалите из директории распакованного драйвера файл каталога безопасности
.cat, так как любое изменение текстового содержимого.infделает старую криптографическую контрольную сумму недействительной.Сохраните изменения в кодировке ANSI/UTF-8 и установите модифицированный пакет через
devmgmt.mscв тестовом режиме Windows. -
Метод 5: Самостоятельная генерация сертификата и подпись драйвера утилитой SignTool
Откройте консоль PowerShell от имени Администратора и создайте самоподписанный корневой сертификат с назначением подписи кода (Code Signing):
$cert = New-SelfSignedCertificate -Type CodeSigningCert -Subject "CN=LegacyDriverCA" -CertStoreLocation "Cert:\LocalMachine\My"Экспортируйте созданный сертификат в публичное хранилище доверенных корневых центров сертификации:
Export-Certificate -Cert $cert -FilePath "C:\LegacyDriverCA.cer"Import-Certificate -FilePath "C:\LegacyDriverCA.cer" -CertStoreLocation "Cert:\LocalMachine\Root"Import-Certificate -FilePath "C:\LegacyDriverCA.cer" -CertStoreLocation "Cert:\LocalMachine\TrustedPublisher"Сгенерируйте обновленный файл каталога безопасности
.catс помощью утилитыinf2cat.exeиз состава Windows Driver Kit (WDK):inf2cat.exe /driver:"C:\PathToDriver" /os:10_X64,Server2016_X64Подпишите сгенерированный
.cat-файл утилитойsigntool.exe:signtool.exe sign /v /s Root /n "LegacyDriverCA" /t http://timestamp.digicert.com "C:\PathToDriver\driver.cat"
Сводная таблица параметров, кодов ошибок и статусов KMCS
| Параметр / Код сбоя | Диагностическое состояние | Причина блокировки ядром | Метод обхода или исправления |
|---|---|---|---|
Код 52 (Code 52) |
Не удалось проверить цифровую подпись. | Драйвер не подписан WHQL или отсутствует перекрестный сертификат Cross-Certificate. | Активация режима testsigning on или создание самоподписанного сертификата. |
Код 39 (Code 39) |
Драйвер поврежден или не может быть загружен. | Несовместимость архитектур: попытка выполнить x86 (32-бит) .sys в ядре x64 либо блокировка изоляцией ядра HVCI. |
Отключение Memory Integrity (HVCI) или изоляция устройства в виртуальной среде VirtualBox/Hyper-V. |
Код 28 (Code 28) |
Для устройства не установлены драйверы. | Идентификаторы Hardware ID (PID/VID) устройства отсутствуют в INF-манифесте. | Ручное добавление строк USB\VID_xxxx&PID_xxxx в секцию моделей [DeviceInstall.NTamd64]. |
Код 43 (Code 43) |
Сбой запроса дескриптора устройства. | Таймаут инициализации контроллера или сбой аппаратного сброса стека USB. | Отключение параметра «Разрешить отключение этого устройства для экономии энергии» в свойствах контроллера. |
HVCI / Core Isolation |
Блокировка уязвимых или устаревших драйверов. | Аппаратная защита целостности памяти на основе виртуализации (VBS) блокирует небезопасные вызовы ядра. | Отключение изоляции ядра: reg add "HKLM\SYSTEM\CurrentControlSet\Control\DeviceGuard\Scenarios\HypervisorEnforcedCodeIntegrity" /v Enabled /t REG_DWORD /d 0 /f. |
Нестандартные причины и альтернативные методы виртуализации
Критическое предупреждение: Ни один способ отключения проверок подписи в 64-битной Windows не способен принудить процессор выполнить 32-битные инструкции драйвера уровня ядра (Ring 0). Прямая подмена архитектурных библиотек вызовет критический сбой системы с кодовой остановкой
PAGE_FAULT_IN_NONPAGED_AREAилиSYSTEM_THREAD_EXCEPTION_NOT_HANDLED.
- Деактивация изоляции ядра (HVCI) и черного списка уязвимых драйверов
- В Windows 11 механизм целостности памяти (Hypervisor-Protected Code Integrity) блокирует загрузку legacy-драйверов даже в режиме отключенной проверки подписи.
- Откройте консоль
cmd.exeот имени Администратора и отключите блокировку уязвимых драйверов:
reg add "HKLM\SYSTEM\CurrentControlSet\Control\CI\Config" /v VulnerableDriverBlocklistEnable /t REG_DWORD /d 0 /f - Откройте графический интерфейс: Параметры → Конфиденциальность и безопасность → Безопасность Windows → Безопасность устройства → Сведения об изоляции ядра. Переведите переключатель Целостность памяти (Memory Integrity) в положение Откл. и перезагрузите рабочую станцию.
- Оборачивание 32-битного драйвера в пользовательский режим через UMDF
- Если подключаемое оборудование взаимодействует исключительно через последовательные шины (COM-порты, Virtual Serial Port, FTDI), переведите устройство на функционирование в User-Mode Driver Framework.
- Вместо прямого обращения к 32-битному файлу
.sysиспользуйте универсальный системный драйвер WinUSB: откройте утилиту Zadig (v2.8 или выше). - В меню выберите Options → List All Devices, найдите в списке целевое legacy-устройство, выберите целевой драйвер WinUSB (v6.1.7600.16385) или libusb-win32 и нажмите кнопку Replace Driver.
- Для доступа прикладного 32-битного программного обеспечения к портам используйте программные прослойки перенаправления: установите мост
com0com(Null-modem emulator) с включенной эмуляцией Baud Rate Emulation.
- Аппаратный проброс USB-устройства в изолированную 32-битную виртуальную машину
- Для устройств со специфическим 32-битным микрокодом ядра разверните гостевую 32-битную ОС (Windows 7 x86 или Windows XP x86) внутри гипервизора Oracle VM VirtualBox.
- Установите пакет VirtualBox Extension Pack для активации контроллеров USB 2.0 (EHCI) и USB 3.0 (xHCI).
- В свойствах виртуальной машины перейдите в раздел Носители / Порты → USB, активируйте чекбокс Включить контроллер USB и нажмите иконку Добавить фильтр USB. Выберите подключенное аппаратное устройство по его значениям
VendorIDиProductID. - Запустите гостевую 32-битную систему: гипервизор перехватит контроль над физическим портом на уровне хост-фильтра, после чего штатный оригинальный 32-битный драйвер установится внутри виртуальной машины без системных конфликтов с x64-ядром хоста.
- Сетевой проброс устройств через протокол USB over IP (USB/IP)
- Если оборудование требует постоянной интеграции с прикладными программами на хост-машине без прямого подключения к гипервизору, настройте аппаратный сервер очередей на базе микрокомпьютера с Linux (Raspberry Pi, Orange Pi).
- Подключите legacy-устройство к плате и установите демон USB/IP:
sudo apt install usbip hwdata && sudo modprobe usbip-host - Определите шинный номер устройства командой
usbip list -lи откройте к нему сетевой доступ:
sudo usbip bind -b 1-1.2 - На хост-системе Windows запустите клиент
usbip.exe, добавьте виртуальный сетевой контроллер и подключите устройство удаленно через TCP-порт3240:
usbip.exe attach -r 192.168.1.100 -b 1-1.2
