Как вручную развернуть службу водителя?
Как вручную развернуть или зарегистрировать драйвер фильтра Windows?
Предупреждение: впереди много "доказательств исследовательских усилий". Вам не нужно больше читать, если вы не хотите. Я просто укажу подробно, что я попробовал то, что вы должны, я попробовал то, что говорит MSDN, и я попробовал все, что кто-либо в Интернете когда-либо предлагал.
TL; д-р: Каков намеченный путь?
Фон
Я тестирую развертывание 64-разрядного драйвера, разработанного в Visual Studio 2013, на 64-разрядной машине Windows. Я хочу зарегистрировать службу драйверов в Windows и запустить ее.
Что вы пробовали
Функция развертывания драйверов Visual Studio 2013
В идеале вы должны использовать возможности Visual Studio для автоматического развертывания на удаленном компьютере. К сожалению, это просто не работает ("Произошла расширенная ошибка")
Использование мастера добавления нового оборудования
В идеале вы должны использовать мастер установки нового оборудования Windows (см. Страницу MSDN. Использование мастера установки оборудования для установки пакета драйверов. К счастью, начиная с Windows 7, Microsoft удалила мастер установки нового оборудования из панели управления, требуя запуска вручную
Hdwwiz.exe
из командной строки с повышенными правами. К сожалению, вы не можете использовать Мастер добавления нового оборудования, чтобы добавить пакет установки драйверов, поскольку Мастер добавления нового оборудования работает только с оборудованием (то есть не работает с драйверами фильтров):Мастер знает это, поэтому не предлагает вам устанавливать какие-либо службы драйверов.
Утилита командной строки SC
В идеале вы должны зарегистрировать службу драйвера вручную в диспетчере управления службами с помощью
sc.exe
инструмент из командной строки с повышенными правами:>sc create MyDriver binPath="C:\Drop\Driver\MyDriver.sys" type=kernel >[SC] CreateService SUCCESS
К сожалению, даже с действительной цифровой подписью в файле драйвера:
Windows откажется устанавливать драйвер:
Утилита загрузчика драйверов OSR
В идеале можно использовать утилиту OSR Driver Loader. Но даже с файлом драйвера с цифровой подписью драйвер не будет установлен:
Установочный файл.INF
В идеале вы должны развернуть пакет драйверов и установить его, установив из
.inf
, Тогда я могу просто щелкнуть правой кнопкой мыши INF, выбрать Установить. Но он просто не работает - он не регистрирует ни одного нового драйвера.Настройка.INF с разделом DefaultInstall
В идеале вы бы просто использовать
.INF
подать раздел DefaultInstall. Windows просто выполнит раздел DefaultInstall. К сожалению, MSDN предупреждает, что вы не можете использовать это для драйверов:Примечание. INF-файл пакета драйвера не должен содержать раздел INF DefaultInstall.
Причина, по которой вы не можете этого сделать, заключается в том, что у DefaultInstall нет директивы AddService. Даже если мы проигнорируем предупреждение и попробуем все равно, оно просто не сработает - оно не зарегистрирует никакой новой службы драйверов.
Настройка.INF с разделом DefaultInstall.Services
Хотя MSDN предостерегает вас от использования DefaultInstall для регистрации служб драйверов, мы можем игнорировать их и использовать
[DefaultInstall.Services]
раздел. К счастью, он на самом деле пытается установить службу драйвера:но Windows тогда утверждает, что драйвер не подписан:
служба водителя фактически не зарегистрирована.
SetupAPI InstallHinfSection функция
В идеале я мог бы использовать SetupAPI для запуска командной строки, эквивалентной приведенной выше:
>RUNDLL32.EXE SETUPAPI.DLL,InstallHinfSection DefaultInstall 132 C:\Drop\Driver\ipfw.inf
За исключением того, что драйвер не устанавливается. Функция возвращается успешно; но Windows считает, что драйвер не подписан:
Используйте BCDEDIT для включения TESTSIGNING
В идеале я бы следовал инструкциям из опции конфигурации загрузки TESTSIGNING, в которой говорится, что нужно запускать из командной строки с повышенными правами:
>Bcdedit.exe -set TESTSIGNING ON
За исключением того, что происходит с ошибкой:
>Bcdedit.exe -set TESTSIGNING ON An error has occurred setting the element data. The value is protected by Secure Boot policy and cannot be modified or deleted.
Используйте BCDEDIT, чтобы включить DEBUG
В идеале я бы следовал инструкциям по установке неподписанного драйвера во время разработки и тестирования, который говорит, чтобы запускаться из командной строки с повышенными правами:
>bcdedit -debug on
За исключением того, что происходит с ошибкой:
>bcdedit -debug on An error occurred while attempting to modify the debugger settings. The value is protected by Secure Boot policy and cannot be modified or deleted.
Используйте расширенные параметры восстановления, чтобы отключить принудительное использование подписи драйверов
В идеале я бы использовал расширенные параметры восстановления, чтобы отключить принудительное использование подписи драйверов:
За исключением того, что после запуска Windows подпись драйвера все еще включена:
Отключить SecureBoot в BIOS
В идеале на этом виртуальном компьютере Hyper-V я бы отключил SecureBoot в его виртуальном BIOS:
и затем попробуйте отключить политику подписи драйверов.
И, боже мой, три дня на это. Я бы хотел, чтобы кто-то из Microsoft объяснил:
- не только правильный способ тестирования драйверов во время разработки
- но подробно объяснить, почему каждая из вышеперечисленных попыток не удалась
Как правильно
Вместо того, чтобы пробовать случайные вещи, снова и снова (и снова, и снова. И снова), как правильно установить службу драйвера фильтра?
Бонусный вопрос
Почему Microsoft отказывается облегчить жизнь разработчикам?
Бонус Болтовня
Файл драйвера подписан действительным доверенным сертификатом.
Сертификат, который подписывает файл драйвера.sys, также находится в хранилище доверенных корневых сертификатов локального компьютера:
Вот почему подпись файла драйвера является действительной и надежной.
Одноразовый комментарий на случайной странице в MSDN говорит, что тестовые сертификаты должны быть добавлены в два места в локальном хранилище компьютеров:
Тестовые сертификаты, которые используются для встраивания подписей в файлы драйверов и для подписи файла каталога пакета драйверов, должны быть добавлены в
Что объясняет, почему я добавил сертификат в другой магазин:
Windows 10 Technical Preview, 64-разрядная версия
Бонус Чтение
- Использование мастера установки оборудования для установки пакета драйвера
- Использование файла INF для установки драйвера фильтра файловой системы
- Использование INF-файла для удаления драйвера фильтра файловой системы
- Написание приложения для установки устройства
- INF DefaultInstall Раздел
- Установка тестовых сертификатов
- Установка тестового сертификата на тестовом компьютере
- Использование CertMgr для установки тестовых сертификатов на тестовом компьютере
0 ответов
И если вы все еще не можете и проблем с сертификатом нет, я сделал это так:
devcon install irpsender\irpsender.inf Root\irpsender
Где Root\irpsender берется из файла.inf:
[Standard.NT$ARCH$]
%irpsender.DeviceDesc%=irpsender_Device, Root\irpsender ; TODO: edit hw-id
Мой подход, хотя и был успешным в некоторых старых версиях Win10, не работал в Win8.1 - я создал службу, подобную описанной выше, и запустил ее;
DriverEntry
звонят и больше ничего. Также получил
c:\DriverTest\Drivers>sc stop irpsender
[SC] ControlService FAILED 1052:
The requested control is not valid for this service.
Вероятно, из-за того, что не указан идентификатор оборудования.
HTH