Только создание COM-объекта, если DLL-библиотека, которая реализует его, подписана? - PullRequest
1 голос
/ 07 октября 2008

У нас есть код, который использует LoadLibrary и GetProcAddress для реализации архитектуры плагинов для одного из наших продуктов. Мы гарантируем, что DLL, которая должна быть загружена, подписана нашим ключом для подписи кода.

Мы изменяем архитектуру плагина, чтобы вместо него использовать COM. Есть ли способ принудительно подписать код (желательно с нашим сертификатом) при создании экземпляра COM-объекта?

Ответы [ 2 ]

2 голосов
/ 07 октября 2008

Это необходимо сделать на уровне DLL с помощью Authenticode API. Стандартный API называется WinVerifyTrust () , и там есть примеры, документированные здесь. Есть еще одна статья KB с номером 323809 , в которой приведен пример того, как извлечь другие детали из информации authenticode, прикрепленной к вашей DLL.

Конечно, эти API ожидают, что им будет передан путь к самой DLL, тогда как в сценарии COM-плагина вы обычно не затрагиваете это напрямую, а вместо этого полагаетесь на регистрацию, чтобы найти правильный двоичный файл. Вы можете либо свернуть сценарий загрузки вручную (т.е. загрузить DLL с помощью LoadLibrary () и вызвать DllGetClassObject () самостоятельно), либо просто потребовать от пользователей вашего API придерживаться дополнительных правил, таких как размещение DLL в определенное место независимо от регистрации.

Или, как предложил Роб Уокер, самостоятельно найдите регистрацию CLSID в реестре и используйте ее как способ найти нужную DLL для проверки.

1 голос
/ 07 октября 2008

Я не думаю, что вы можете сделать это напрямую, но вы можете найти DLL-библиотеку, используемую CLSID в реестре, и проверить ее сигнатуру перед выполнением вызова CoCreateInstance.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...