从非提升的进程连接到提升的COM服务器

时间:2010-03-24 17:31:49

标签: c++ com windows-7 windows-vista uac

我们有一个程序可以启动托管本地COM服务器的子进程,由于各种原因必须启动它。只要父进程和子进程都被提升,一切正常。

但是,我们还希望在父进程未提升时运行。启动子进程会生成UAC对话框(可以接受),并且子进程似乎正确启动并成功调用CoRegisterClassObject。但是,在使用相同的CLSID调用CoCreateInstance时,父进程会获得REGDB_E_CLASSNOTREG。

我认为这是某种权限问题。如何在提升的服务器中注册我的类以允许从非提升的进程中调用它?

2 个答案:

答案 0 :(得分:2)

阅读The COM Elevation Moniker有两种方法可以访问提升的进程外服务器。

答案 1 :(得分:1)

Interprocess COM marshalling messages are subject to Vista's UIPI。 我建议您使用其他一些方式进行通信,例如a named pipe with ACL modified,套接字/ WCF / Remoting与私有协议等,以允许非特权用户访问。