2008-10-07 4 views
1

LoadLibrary와 GetProcAddress를 사용하여 우리 제품 중 하나의 플러그인 아키텍처를 구현하는 코드가 있습니다. 로드 할 DLL이 코드 서명 키로 서명되었는지 확인합니다.COM 개체를 구현하는 DLL이 서명 된 경우에만 COM 개체를 만들 수 있습니까?

우리는 COM을 대신 사용하도록 플러그인 아키텍처를 변경하고 있습니다. COM 개체를 인스턴스화 할 때 코드 서명을 강요하는 방법이 있습니까?

답변

2

Authenticode API를 사용하여 DLL 수준에서이 작업을 수행해야합니다. 표준 API는 WinVerifyTrust()이며 샘플 문서가 있습니다. 다른 KB article number 323809은 DLL에 첨부 된 authenticode 정보에서 다른 세부 정보를 떼어내는 방법을 보여줍니다.

물론 이러한 API는 DLL 자체에 대한 경로가 전달되는 반면 COM 플러그인 시나리오에서는 일반적으로 직접적으로 만지는 것이 아니라 올바른 이진을 찾기 위해 등록에 의존합니다. 로드 시나리오 (예 : LoadLibrary()를 사용하여 DLL을로드하고 직접 DllGetClassObject())를 호출하거나 API 사용자가 등록에 관계없이 특정 위치에 DLL을 배치하는 것과 같은 추가 규칙을 따르도록 요구할 수 있습니다.

Rob Walker가 제안했듯이 직접 레지스트리에서 CLSID 등록을 검색하여이를 확인하기위한 올바른 DLL을 찾는 방법으로 사용하십시오.

+0

우리의 COM 추가 기능은 .NET에서 개발 된 경우 스스로 서명 한 것으로 확인됩니다. Unmanged 호스트는 이제 간접적으로 WinVerifyTrust를 수행하고있었습니다. 문제에 대한 자세한 KB 기사 # 936707을 확인했습니다. 이 길을가는 사람들을 위해 읽을만한 가치가 있을지도 모릅니다. – Aardvark

1

나는 이것을 직접 할 수 있다고 생각하지 않지만, 레지스트리에서 CLSID가 사용하는 DLL을 검색하고 CoCreateInstance 호출을하기 전에 서명을 검사 할 수 있습니다.