首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >确定与COM RPC服务器通信的客户端进程的进程ID

确定与COM RPC服务器通信的客户端进程的进程ID
EN

Stack Overflow用户
提问于 2013-09-12 17:27:16
回答 1查看 1.9K关注 0票数 3

在COM RPC模型中,如果服务器在单独的进程上运行,是否可以知道与服务器通信的客户端进程的进程ID?

用例

我有一个Out process RPC Server,它可以接收来自一个或多个客户端进程的请求。有时,服务器需要知道客户机进程,以便使用写入进程存储器将数据写回客户端地址空间。

还请注意,API签名、缓冲区的分配方式和API的调用方式超出了我的控制范围。

EN

回答 1

Stack Overflow用户

发布于 2022-09-10 00:08:03

我知道我已经晚了将近9年了,但我只是在回答这个问题,以防将来有人需要它。

所以有办法做到这一点..。但是通过一个私有/无文档的COM接口,即ICallingProcessInfo

接口定义:

代码语言:javascript
运行
复制
MIDL_INTERFACE("68C6A1B9-DE39-42C3-8D28-BF40A5126541")
ICallingProcessInfo : public IUnknown
{
public:
    virtual STDMETHOD(OpenCallerProcessHandle)(DWORD dwDesiredAccess, HANDLE* handle) = 0;
};

用法:

代码语言:javascript
运行
复制
HANDLE handle;
ComPtr<ICallingProcessInfo> callingProcessInfo; // ComPtr is from WRL, you can use the interface directly instead
CoGetCallContext(__uuidof(ICallingProcessInfo), (void**)callingProcessInfo.GetAddressOf());
callingProcessInfo->OpenCallerProcessHandle(PROCESS_QUERY_LIMITED_INFORMATION, &handle);

auto pid = GetProcessId(handle);

我在WinRT OOP服务器上测试了这一点,但是由于WinRT服务器只是COM服务器,所以它也应该与普通COM服务器一起工作

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18770684

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档