gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-05 08:00:14 24 4
gpt4 key购买 nike

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

用例

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

enter image description here

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

最佳答案

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

所以有一种方法可以做到这一点....但是通过私有(private)/未记录的 COM 接口(interface),即 ICallingProcessInfo

接口(interface)定义:

MIDL_INTERFACE("68C6A1B9-DE39-42C3-8D28-BF40A5126541")
ICallingProcessInfo : public IUnknown
{
public:
virtual STDMETHOD(OpenCallerProcessHandle)(DWORD dwDesiredAccess, HANDLE* handle) = 0;
};

用法:

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 服务器

关于c++ - 确定与 COM RPC 服务器通信的客户端进程的进程 ID,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18770684/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com