Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/145.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 进程外COM对象能否确定其父进程?_C++_Com_Winapi - Fatal编程技术网

C++ 进程外COM对象能否确定其父进程?

C++ 进程外COM对象能否确定其父进程?,c++,com,winapi,C++,Com,Winapi,从进程外COM对象(LocalServer32)可以确定请求创建该对象的客户端进程吗?-具体来说,我需要掌握客户机进程命令行 这个问题之所以出现,是因为(由于标准化、实施和支持较差)对象的潜在第三方客户端具有各种特性,对象需要解决这些特性 为此,对象需要能够识别其当前客户端 不幸的是,扩展COM对象的接口以便客户端能够识别自己是不可能的。。。或者更准确地说,接口可以扩展,但我无法让客户端调用扩展。进一步研究后,我怀疑答案是“否”,但无论如何告诉我我错了 使用Process Explorer,我可

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

这个问题之所以出现,是因为(由于标准化、实施和支持较差)对象的潜在第三方客户端具有各种特性,对象需要解决这些特性

为此,对象需要能够识别其当前客户端


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

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


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

可能是因为COM服务器进程由同一AppID的所有客户端共享,所以不可能实际获取客户端应用程序的PID。正如@Anders所说,您可以使用
CoImpersonateClient
(或者,更好的方法是调用并查询结果)来查找调用者的帐户和登录会话,但您无法获取进程本身


如果您试图解决遗留客户端中的错误,我建议您为新(非遗留)客户端创建一组新的CLSID(或IID,如果您可以使用垫片模拟遗留客户端依赖的所有错误),并进行非常严格的输入验证,并且仅在这些新CLSID中实现新功能。旧式客户端坚持使用旧的CLSID,您可以简单地使用现有的旧式实现(或bug兼容克隆的bug)。

我不这么认为。这似乎允许我假装拥有客户端安全属性。您是否尝试调用OpenThreadToken+GetTokenInformation(在CoImpersonaeClient之后),您至少应该能够找到登录会话luid和用户登录sid。很抱歉,如果有这些信息,我将如何访问COM对象的客户端进程?