Nous avons un programme qui lance un processus enfant qui héberge un serveur COM local, qui doit être lancé pour diverses raisons. Tout fonctionne bien tant que le processus parent et le processus enfant sont élevés. Cependant, nous voulons également exécuter lorsque le processus parent est non-élevé. Le lancement du processus enfant génère une boîte de dialogue UAC (ce qui est acceptable) et l'enfant semble démarrer correctement et avec succès CoRegisterClassObject
. Toutefois, le processus parent obtient REGDB_E_CLASSNOTREG lors de l'appel CoCreateInstance
avec le même CLSID. Je suppose que c'est une sorte de problème d'autorisations. Comment puis-je enregistrer ma classe dans le serveur surélevé pour lui permettre d'être appelée à partir d'un processus non surélevé?Connexion à un serveur COM élevé à partir d'un processus non-élevé
3
A
Répondre
2
Lecture de The COM Elevation Moniker pour deux manières d'accéder à un serveur hors processus élevé.
1
Interprocess COM marshalling messages are subject to Vista's UIPI. Je vous suggère d'utiliser d'autres moyens de communication, tels que a named pipe with ACL modified, sockets/WCF/Remoting avec des protocoles privés, etc. pour permettre à un utilisateur non privilégié d'y accéder.