Как вручную развернуть службу водителя?

Как вручную развернуть или зарегистрировать драйвер фильтра 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-разрядная версия

Бонус Чтение

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

Другие вопросы по тегам