Использовать COM-объект из DLL без регистрации
Можно ли использовать COM Object из DLL без регистрации в C++ неуправляемый код?
3 ответа
Решение
Да, если это не зависит от других зарегистрированных объектов.
- Вы
LoadLibrary
DLL - Вы
GetProcAddress
егоDllGetClassObject
- Ты звонишь
DllGetClassObject
чтобы получитьIClassFactory
указатель дляCLSID
представляет интерес - Вы хороши, чтобы пойти с
IClassFactory::CreateInstance
и создать экземпляр класса
Вы можете создать файлы манифеста для DLL и использовать COM без регистрации.
Скажем, COM DLL нужно зарегистрировать, но приложение не имеет прав доступа администратора. Здесь легко взломать, чтобы зарегистрировать DLL под HKEY_CURRENT_USER
, который не требует прав администратора:
- использование
LoadLibrary
загрузить COM DLL. - Вызов
GetGetProcAddress
получить адресDllRegisterServer
, - Вызов
RegOverridePredefKey
сделать перенаправления временного реестра:HKEY_LOCAL_MACHINE
вHKEY_CURRENT_USER
а такжеHKEY_CLASSES_ROOT
вHKEY_CURRENT_USER\Software\Classes
, - Вызов
DllRegisterServer
полученный в шаге 2. - Обратный перенаправления реестра.
- Используйте COM-сервер как обычно, теперь он зарегистрирован под
HKEY_CURRENT_USER
,