Как проверить, является ли PE-файл (DLL, EXE) компонентом COM? - PullRequest
4 голосов
/ 21 апреля 2010

Мне нужно написать модуль-заглушку, который при вводе PE (DLL / EXE) будет определять, является ли он обычным Win32 DLL / EXE или COM DLL / EXE. Мне нужно определить это программно.

Существуют ли какие-либо API-интерфейсы Windows для этой цели?

Ответы [ 2 ]

0 голосов
/ 21 апреля 2010

Я подозреваю, что это что-то, что было бы очень трудно сделать с почти 100% точностью. Хотя некоторые мысли:

  • COM DLL будет экспортировать такие функции, как DllRegisterServer и DllUnregisterServer. Вы можете использовать LoadLibrary () для загрузки Dll, а затем GetProcAddress (), чтобы проверить наличие этих функций. Если они там, то весьма вероятно, что это COM dll.

  • Простой win32 Dll будет экспортировать DllMain. Вы можете использовать ту же технику, чтобы проверить это. Если вы найдете его, то очень вероятно, что его win32.

  • Я не знаю, как определить, является ли exe-сервер COM-сервером. Серверы, написанные с использованием ATL, часто имеют сценарий регистрации, встроенный в их таблицу ресурсов, но это не обязательно. И вам не нужно использовать ATL для написания COM-сервера. Сервисы, использующие «com-less-com», также имеют встроенный манифест. Вы можете отсканировать реестр (ниже HKLM / Classes / Software /), чтобы увидеть, зарегистрирован ли исполняемый файл, но может быть, что исполняемый файл использует com без регистрации или просто еще не зарегистрирован.

Надеюсь, это поможет.

0 голосов
/ 21 апреля 2010

Для традиционных COM DLL вы можете найти известные экспортированные методы (поиск по msdn для этих методов)

  1. DllGetClassObject
  2. DllRegisterServer
  3. DllUnregisterServer
  4. DllCanUnloadNow

Я не уверен насчет EXE COM-серверов, потому что они обычно используют параметры командной строки для регистрации / отмены регистрации и для объекта класса обычно вызывают CoRegisterClassObject при запуске EXE.

Большинство СОМ-серверов традиционно также зарегистрированы в Реестре, но теперь вы можете создавать бесплатные серверы для регистрации.

Вы также ищете сборку .NET с некоторыми видимыми классами COM?

...