[COM/C++] Problem mit lokalem Server

Muepe32

Erfahrenes Mitglied
Hallo zusammen,

Ich versuche momentan in einem fremden Prozess einen COM-Server zu starten. Dazu registriere ich meine Objekte in der Registry und rufe in der DLL, die im fremden Prozess läuft entsprechend CoRegisterClassObject auf. Da bekomme ich auch entsprechend zurück, dass kein Fehler auftrat. Die Klassen sind folgendermassen registriert:
HKLM\Software\Classes\CLSID\{GUID}\LocalServer32 <- Default="Pfad zur Exe des fremden Prozesses"

In meiner konsumierenden Applikation verwende ich nun CoCreateInstance um ein solches Objekt zu erstellen. Scheint die Registrierung mehr oder weniger funktioniert zu haben hapert es bei der Erstellung des Objekts. Mein fremder Prozess wird neu gestartet und es wird natürlich bis zum Timeout gewartet, da in der neuen Instanz des Prozesses CoRegisterClassObject nie aufgerufen wird.

Warum wird nicht mein bereits gestarteter Prozess verwendet der auch via CoRegisterclassObject mitgeteilt hat, dass er eine entsprechende Factory für diese CLSID bereit hat?

Nochmals zur Verdeutlichung:
1. Fremder Prozess startet normal
2. Meine DLL wird injiziert, registriert ihre Objekte in der Registry mit Pfad zur Exe des fremden Prozesses als LocalServer (CoRegisterClassObject(riid, static_cast<IUnknown*>(factory), CLSCTX_LOCAL_SERVER, REGCLS_MULTIPLEUSE, &token);)
3. Konsumierende Applikation verwendet CoCreateInstance mit CLSCTX_LOCAL_SERVER und den entsprechenden UUIDs.
4. Fremder Prozess wird erneut gestartet durch COM.

Vergleiche ich zum Beispiel mit den Registry-Einträgen von iTunes (für die iTunes-COM-API) ist der Unterschied eigentlich minimal (AppID und ProgID sind gesetzte Schlüssel) und da funktioniert es problemlos. Was mache ich falsch?

Grüsse
Muepe
 
Problem war folgendes:
Der fremde Prozess lief als Administrator, der konsumierende Prozess as Invoker. Ohne Sicherheitseinstellungen lief das nicht und der Kosument hat dann natürlich den Prozess nochmals gestartet mit as Invoker.

Gruss
Muepe
 
Zurück