Использовать COM-объект из DLL без регистрации

Можно ли использовать COM Object из DLL без регистрации в C++ неуправляемый код?

3 ответа

Решение

Да, если это не зависит от других зарегистрированных объектов.

  1. Вы LoadLibrary DLL
  2. Вы GetProcAddress его DllGetClassObject
  3. Ты звонишь DllGetClassObject чтобы получить IClassFactory указатель для CLSID представляет интерес
  4. Вы хороши, чтобы пойти с IClassFactory::CreateInstance и создать экземпляр класса

Вы можете создать файлы манифеста для DLL и использовать COM без регистрации.

Скажем, COM DLL нужно зарегистрировать, но приложение не имеет прав доступа администратора. Здесь легко взломать, чтобы зарегистрировать DLL под HKEY_CURRENT_USER, который не требует прав администратора:

  1. использование LoadLibrary загрузить COM DLL.
  2. Вызов GetGetProcAddress получить адрес DllRegisterServer,
  3. Вызов RegOverridePredefKey сделать перенаправления временного реестра: HKEY_LOCAL_MACHINE в HKEY_CURRENT_USER а также HKEY_CLASSES_ROOT в HKEY_CURRENT_USER\Software\Classes,
  4. Вызов DllRegisterServer полученный в шаге 2.
  5. Обратный перенаправления реестра.
  6. Используйте COM-сервер как обычно, теперь он зарегистрирован под HKEY_CURRENT_USER,
Другие вопросы по тегам