Тема embedded-подписи драйверов Windows не нова. Есть достаточно подробное описание Digital Signatures for Kernel Modules on Windows. Документ большой: прочел, написал cmd-файлы и забыл.
Но недавно мне понадобилось собирать исполняемые файлы пользовательского режима с флагом IMAGE_DLLCHARACTERISTICS_FORCE_INTEGRITY и, естественно, цифровой подписью. Решение было простым: с использованием cmd-файлов для подписи драйверов были успешно подписаны и файлы пользовательского режима. Smoke-тесты дали отличные результаты. А вот запуск на Windows Vista дал ошибку 577 (ERROR_INVALID_IMAGE_HASH):
Проведя несколько тестов и поискав на просторах MSDN было найдено много рекомендаций подписывать user mod'ные модули с ключем /ph. Это и стало решением проблемы. А о том, что проблемными платформами являются Windows Vista и 2008 Server, говорит статься Forced Integrity Signing of Portable Executable (PE) files: Use the /ph option with SignTool:
ΞρεΤΙκ