Мне нужно написать модуль заглушки, который при вводе PE (DLL/EXE) в качестве входного сигнала определит, является ли это обычным Win32 DLL/EXE или COM DLL/EXE. Мне нужно определить это программно.Как проверить, является ли PE-файл (DLL, EXE) COM-компонентом?
Есть ли какие-либо Windows API для этой цели?
Не лучше ли GetClassObject лучше? Это необходимо для создания объекта, но работа DllRegisterServer могла быть выполнена программой установки. – ixe013
Обратите внимание, что COM-файлы DLL абсолютно могут иметь DllMain. Имейте в виду, что DLL COM - это всего лишь особый тип DLL Win32, но он все еще является dll Win32, поэтому он может делать все, что может использовать DLL Win32. В любом случае DllMain не является экспортом, поэтому вы не найдете его с GetProcAddress; это действительно точка входа загрузчика. Проверка наличия/отсутствия DllGetClassObject, скорее всего, будет лучшим выбором. – BrendanMcK
Кроме того, для чего стоит, если безопасность является проблемой, вам следует избегать использования LoadLibrary в ненадежной DLL, поскольку в результате будет выполняться DLL-код DllMain в вашем процессе - presto, вы только что выполнили ненадежный код. Это может быть или не быть проблемой в зависимости от того, как ваше приложение используется, но в любом случае стоит осознавать проблему. (Вместо этого можно использовать LoadLibraryEx (LOAD_LIBRARY_AS_DATAFILE), но я не знаю, будет ли GetProcAddress работать тогда, вам может понадобиться вручную разобрать таблицу экспорта). – BrendanMcK