У нас есть некий модуль ядра, который никак не связан с железом. Подписан с помощью EV-сертификата, полученного совсем недавно вместе с USB-ключом. Далее мы отправили этот сертификат Microsoft, подписав нашим ключом их файл — это новое требование для подписи драйверов.
Установка драйвера простая — Inno setup кладёт файл .sys в \Windows\Syetem32\driver и регистрирует с помощью sc create.
И все равно ошиибка в Windows 10 после вызова CreateFile — [2] The system cannot find the file specified.
Если загрузить Windows 10 с выключенным driver signature enforcement, то работает. Но только так. Иначе еще появляется сообщение, что установлен неподписанный драйвер.
Здравствуйте, NiJazz, Вы писали:
NJ>Установка драйвера простая — Inno setup кладёт файл .sys в \Windows\Syetem32\driver и регистрирует с помощью sc create. NJ>И все равно ошиибка в Windows 10 после вызова CreateFile — [2] The system cannot find the file specified.
NJ>Если загрузить Windows 10 с выключенным driver signature enforcement, то работает. Но только так. Иначе еще появляется сообщение, что установлен неподписанный драйвер.
NJ>Что ещё они могут хотеть, чтобы заработало?
Давненько я туда не заглядывал, но разве они не подписанный CAT генерят?
Также не совсем понятно, при чём тут CreateFile. Имеется в виду, открытие виртуального девайса, созданного драйвером, или что? Для начала неплохо бы глянуть sc query на этот драйвер, каков его статус. Посмотреть в Event Viewer, что там говорится на эту тему.
Здравствуйте, NiJazz, Вы писали: NJ>Установка драйвера простая — Inno setup кладёт файл .sys в \Windows\Syetem32\driver и регистрирует с помощью sc create. NJ>И все равно ошиибка в Windows 10 после вызова CreateFile — [2] The system cannot find the file specified.
Это не про подпись. Наиболее вероятно Inno Setup будучи 32-битной прогой кладет драйвер в С:\Windows\SysWOW64\drivers, где винда его найти не можети ибо ищет не там.
Нужно включить 64-битный режим в инно, подробнее тут.
Здравствуйте, NiJazz, Вы писали:
NJ>Если загрузить Windows 10 с выключенным driver signature enforcement, то работает. Но только так. Иначе еще появляется сообщение, что установлен неподписанный драйвер. NJ>Что ещё они могут хотеть, чтобы заработало?
Еще если Secure Boot включен, то даже EV-подписанный драйвер не запустится. Непонятно получили вы драйвер подписанный MS или нет.
Здравствуйте, NiJazz, Вы писали:
NJ>Далее мы отправили этот сертификат Microsoft, подписав нашим ключом их файл — это новое требование для подписи драйверов.
Убедитесь, что Вы выполнили все необходимые для подписания драйвера шаги. Отправка в MS подписанного Вашим сертификатом их файла — это однократная процедура, необходимая для регистрации Developer's Account. После этого необходимо отправлять для подписи каждую сборку драйвера. И заточена эта процедура под PnP-драйверы — то есть, в отправляемом CAB-пакете должен быть INF-файл, для которого MS сгенерирует и подпишет CAT-файл. Также они подпишут и SYS-файлы.
Фактически Ваш драйвер не обязан быть PnP, но синтаксически правильный INF-файл сделать придется (использовать его потом не обязательно). О том, как сделать такой legacy INF-файл, написано где-то в статьях на сайте MS.
NJ>Если загрузить Windows 10 с выключенным driver signature enforcement, то работает. Но только так. Иначе еще появляется сообщение, что установлен неподписанный драйвер.
Если при запрете проверки подписи все работает нормально — значит, Inno Setup кладет драйвер в правильный каталог (но убедитесь, что все работает и в 64-разрядных системах). Ну и проверять загрузку драйвера действительно лучше непосредственно — через sc query или отладочные сообщения от драйвера, поскольку запрос IRP_CREATE может не доходить и до работающего драйвера, а Вы будете искать проблему не там.
Re[2]: Windows 10 signature enforcement - что хотят?
Здравствуйте, Евгений Музыченко, Вы писали:
ЕМ>Убедитесь, что Вы выполнили все необходимые для подписания драйвера шаги. Отправка в MS подписанного Вашим сертификатом их файла — это однократная процедура, необходимая для регистрации Developer's Account. После этого необходимо отправлять для подписи каждую сборку драйвера. И заточена эта процедура под PnP-драйверы — то есть, в отправляемом CAB-пакете должен быть INF-файл, для которого MS сгенерирует и подпишет CAT-файл. Также они подпишут и SYS-файлы.
Честно говоря, я (не без облегчения) делегировал эту регистрацию манагеру, но я тоже понял это как отправку им каждой сборки на дополнительную подпись, но он уверил, что не надо. Значит, цирк продолжается
ЕМ>Фактически Ваш драйвер не обязан быть PnP, но синтаксически правильный INF-файл сделать придется (использовать его потом не обязательно). О том, как сделать такой legacy INF-файл, написано где-то в статьях на сайте MS.
А не хватит того минимального INF-файла, взятого из примеров WDK?
При регистрации через Inno setup он не используется, но используется вручную при тестировании.
ЕМ>Если при запрете проверки подписи все работает нормально — значит, Inno Setup кладет драйвер в правильный каталог (но убедитесь, что все работает и в 64-разрядных системах). Ну и проверять загрузку драйвера действительно лучше непосредственно — через sc query или отладочные сообщения от драйвера, поскольку запрос IRP_CREATE может не доходить и до работающего драйвера, а Вы будете искать проблему не там.
С папками точно все ОК, проблема возникла лишь в Windows 10, до этого и amd64 и x86 работали отлично.