【发布时间】:2022-06-11 18:01:37
【问题描述】:
我正在阅读函数RpcServerInqCallAttributes (source)。
我看到一个程序(vmcompute.exe)这样调用这个函数(基于反转):
RPC_CALL_ATTRIBUTES CallAttributes;
memset(&CallAttributes, 0, sizeof(CallAttributes));
CallAttributes.Version = 3;
CallAttributes.Flags = RPC_QUERY_CLIENT_PID;
Status = RpcServerInqCallAttributes(0, &ClientContextAttributes);
它检索 dockerd 的 PID,但它如何知道要检索的 PID?
它只是使用RPC_QUERY_CLIENT_PID 来查询PID,但基于什么?它没有指定进程的名称。
我阅读了this 的答案,但没有解释它如何知道要检索哪个进程 PID。
【问题讨论】:
-
“它如何知道要检索的 PID”是什么意思?进程id(即ClientPID结构体成员)是发起RPC调用的客户端进程的id,通常在RPC服务器例程中调用RpcServerInqCallAttributes。
-
哦,我想我明白了。 RPC 会话的这一部分。在我的情况下,可能
dockerd调用vmcompute.exe(即RPC 服务器)中的一个函数,然后vmcompute调用RpcServerInqCallAttributes来识别调用进程(dockerd)。但是如果有多个客户端联系 RPC 服务器会发生什么,它怎么知道要检索哪个进程 ID? -
如果在 RPC 服务器例程线程中调用 RpcServerInqCallAttributes,则客户端是明确的,否则您必须将客户端绑定句柄作为第一个参数传递。
-
好的,谢谢。我想我明白了。
标签: c++ winapi visual-c++ rpc