【发布时间】:2014-02-10 10:42:33
【问题描述】:
使用 Win32 C++ API,我想知道哪个IPC method 允许多进程通信中的任何端点,以获取与之通信的进程的 PID 或 HANDLE。换句话说,如果进程 A 从进程 B 获得消息:
- A 能否知道 B 发送了消息,而 B(直接)在发送的消息中没有给出任何提示?如何?
- 要求: B 的 PID 不能在 IPC 消息中发送给 A。
通信的目的是简单的远程过程调用。但是,我不希望远程系统/主机上的进程调用本地主机上运行的进程提供的过程。
我当然找到了RPC documentation on MSDN。但是,我想知道是否有比 RPC 更好的方法来实现我想要的。或者,如果您认为 RPC 是可行的方法,您能告诉我为什么吗?如果您知道除 MSDN 之外还有其他值得学习的好的参考资料吗?
【问题讨论】:
-
它有什么帮助?如果端点在另一台计算机上,它根本不会帮助你..而且“句柄”仅在同一进程中有效......通常通过将 RPC 绑定到“127.0.0.1”来解决这个问题......
-
我想得到另一个进程的句柄,就像你通过
OpenProcessAPI的返回值得到句柄一样。这个问题是从某种意义上说的,可能有另一个函数返回 HANDLE 而不需要 PID,例如仅基于 IPC 消息。 -
正如我所说:句柄是特定于进程的!你不能用来自不同进程的句柄做任何事情......
-
在我用进程 A 和 B 给出的示例中。我不想要 B 内部的 B 的 HANDLE(指针)。我想在 A 内部获取 B 的 HANDLE,就像我一样如果我有 B 的 PID 并在 A 内部进行以下调用,将从 A 内部获取它:
HANDLE handleOfB = OpenProcess(PROCESS_VM_READ, FALSE, pibOfB). -
也许你不想理解它... OpenProcess 没有得到一个句柄 from 进程 B;它在进程 A(仅在进程 A 中有效)中为 pidB 获取一个句柄!如果你确定你在同一台电脑上,为什么不通过PID???