Как распространить драйвер kmdf для windows клиентам в частном порядке

Я новичок в разработке драйверов для Windows. Я написал драйвер KMDF для Windows и могу протестировать его развертывание на моей целевой машине с помощью VS deploy. Он работал нормально, и теперь я хотел бы поставить этот драйвер с приложением, которое использует этот драйвер.

Вот и проблема ... Я не смог найти в Google ничего, что рассказывало бы нам, как распространять драйвер KMDF (например, сделать установщик). Этот драйвер является драйвером фильтра высшего класса, и он нужен только для моего приложения, поэтому его не следует публиковать в обновлении Windows.

У меня вопрос, как сделать что-то вроде установщика для распространения этого драйвера? Спасибо за любое предложение или руководство.


РЕДАКТИРОВАТЬ 1 Это поддельный драйвер устройства (то есть нет физического устройства для управления)


person MiDaa    schedule 22.06.2018    source источник


Ответы (1)


Обычно драйверы устройств для программного обеспечения не загружаются через Центр обновления Windows. Есть исключения для таких поставщиков, как Intel, AMD, NVIDIA, но это из-за того, что это за компании и насколько они популярны / широко используются (для этого они будут работать с Microsoft). Вы не можете просто удалить драйвер через Центр обновления Windows.

Вам понадобится цифровая подпись для подписи программного обеспечения, работающего в режиме ядра, при условии, что вы собираетесь распространять ее на машины, использующие современные версии Windows x64 (для записи, даже Windows Vista x64 будет обеспечивать выполнение этого требования) . Это требование не будет присутствовать в версиях Windows x86 на данный момент, но, по правде говоря, было бы неэтично не подписывать свое программное обеспечение режима ядра в любом случае.

Начиная с Windows 10 с конкретным патчем, который был выпущен очень рано, требование изменилось с наличия нормальной цифровой подписи, которая могла бы работать для подписи двоичных файлов режима ядра, на необходимость наличия цифровой подписи EV; Чтобы заполучить цифровую подпись EV для подписи программного обеспечения в режиме ядра, вам, несомненно, потребуется быть юридически зарегистрированной как компания (и, вероятно, также потребуется банковский счет компании).

Для получения дополнительной информации об этом см. Следующее.

https://blogs.msdn.microsoft.com/windows_hardware_certification/2015/04/01/driver-signing-changes-in-windows-10/.

Но вот хитрость ... Для систем, которые используют безопасную загрузку (в новых современных системах она, как правило, включена по умолчанию, теперь это функция безопасности), вам потребуется, чтобы ваше программное обеспечение режима ядра было подписано самой Microsoft. . Это потребует от вас поделиться своим программным обеспечением режима ядра с Microsoft, загрузив его через онлайн-портал, но вам все равно понадобится ваша цифровая подпись EV, прежде чем вы сможете перейти к этому этапу.

См. Следующие сведения о требованиях к совместной подписи Microsoft (в зависимости от среды):

https://www.osr.com/blog/2017/07/06/attestation-signing-mystery/

Примечание: пожалуйста, не пытайтесь придумывать идеи, чтобы обойти это (например, включение тестового режима в клиентской системе, а затем использование тестового сертификата для вашего драйвера или отключение безопасной загрузки в системе, которая полагается на нее ... такая работа- обходные пути обходятся дорого в виде снижения безопасности системы и никогда не должны применяться в качестве решения этой проблемы в реальном мире).


Для фактической установки драйвера устройства вы можете программно использовать файл .INF с Win32 API, а затем использовать StartService для запуска службы после установки с .INF. См. Также: https://msdn.microsoft.com/en-us/library/aa376957%28v=vs.85%29.aspx.

Кроме того, вы можете зарегистрировать службу самостоятельно с помощью CreateService, а затем запустите ее с помощью StartService (или перезагрузите компьютер и загрузите его при запуске в зависимости от флагов для создания службы).

Имейте в виду, что иногда при использовании Service Manager вы упускаете важные вещи при регистрации для некоторых типов драйверов (например, минифильтра файловой системы), и вам придется обрабатывать это вручную, иначе это не сработает. Проверьте .INF и убедитесь, что все, что необходимо сделать в соответствии с требованиями, выполнено при использовании Service Manager для установки (если вы решите не полагаться на .INF).


Надеюсь, это поможет вам добраться туда, где вам нужно быть.

person ImmortaleVBR    schedule 22.06.2018
comment
Похоже, установка драйвера больше не вариант для меня / нас ... Я также слышал, что драйвер ядра можно динамически загружать, когда мы его используем, и выгружать после использования, это правда? И разве это тоже ограничивается вышеизложенным? - person MiDaa; 22.06.2018
comment
Вы можете динамически загружать и выгружать драйвер устройства, это правильно, но это не меняет требований к подписи кода в 64-битных версиях Windows. Однако для некоторых типов драйверов устройств (например, минифильтра файловой системы) .INF-файл при использовании для установки будет делать то, что Service Manager не будет делать за вас по умолчанию, поэтому вам все равно придется: для этого, если вы не использовали файл .INF программно и драйвер вашего устройства соответствовал этой категории. - person ImmortaleVBR; 22.06.2018
comment
Однако, если у вас есть загруженный драйвер (он также будет работать, если он был официально установлен и загружен автоматически при загрузке или другими способами, кстати), вы можете просто остановить службу, которую вы зарегистрировали для драйвера устройства, через ControlService. Однако вам понадобится подпрограмма DriverUnload в вашем драйвере, иначе она не сработает. В качестве альтернативы вы можете использовать NtUnloadDriver, но это не рекомендуется, поскольку он недокументирован (и не изменит того факта, что вам все равно понадобится подпрограмма DriverUnload, зарегистрированная в вашем драйвере, чтобы она работала). - person ImmortaleVBR; 22.06.2018
comment
Под DriverUnload я имею в виду, что вам нужно зарегистрировать его в _DRIVER_OBJECT, на который указывает указатель, который вы получаете из подпрограммы DriverEntry. Однако иногда для таких типов, как Минифильтр файловой системы, у вас будет другой способ его регистрации ... например. через регистрационную информацию обратного вызова. Вам нужно будет проверить документацию для вашего типа драйвера. - person ImmortaleVBR; 22.06.2018
comment
Большое спасибо за подробное объяснение, пожалуйста, дайте мне время, чтобы прочитать и понять! - person MiDaa; 22.06.2018