进程外COM对象是否可以确定其父进程?

时间:2010-06-02 16:30:36

标签: c++ com winapi

从进程外COM对象(LocalServer32)中,我可以确定请求创建对象的客户端进程吗? - 具体来说,我需要掌握客户端进程命令行。

这个问题的原因在于(由于标准化,实施和支持不当),对象的潜在第三方客户端具有对象需要解决的各种特性。

要执行此操作,对象需要能够识别其当前客户端。

不幸的是,扩展COM对象的接口以便客户端可以识别自己......或者更准确地说,接口可以扩展,但是我无法让客户端调用扩展。

3 个答案:

答案 0 :(得分:2)

进一步研究后,我怀疑答案是“不”,但无论如何都告诉我,我错了。

使用Process Explorer我可以看到我的COM对象的父进程是“svchost.exe”的实例,而不是客户端应用程序。

答案 1 :(得分:1)

由于COM服务器进程由同一AppID的所有客户端共享,因此无法实际获取客户端应用程序的PID。正如@Anders所说,您可以使用CoImpersonateClient(或者,更好的是,致电CoGetCallContext并询问生成的IServerSecurity)以查找帐户和登录会话来电者,但你不能自己搞这个过程。

如果您正在尝试解决旧版客户端中的错误,我建议您创建一组新的CLSID(或IID,如果您可以使用填充程序模拟旧版客户端所依赖的所有错误) )具有非常严格的输入验证的客户端,并且仅在这些新的CLSID中实现新功能。旧版客户端坚持使用旧的CLSID,您可以在其中使用现有的旧版实现(或bug兼容bug)。

答案 2 :(得分:0)