如何在进程间通信中获取其他端点的进程id

时间:2014-02-10 10:42:33

标签: c++ c windows winapi ipc

使用Win32 C ++ API,我想知道哪个IPC method允许多进程通信中的任何端点获取与之通信的进程的PID或HANDLE。换句话说,如果进程A从进程B获得消息:

  • A可以知道B发送了消息,没有B(直接)在发送的消息中给出任何暗示吗?怎么样?
  • 要求: B的PID不能发送到IPC消息内的A.

通信的目的是一个简单的远程过程调用。但是,我不希望远程系统/主机上的进程调用在本地主机上运行的进程提供的过程。

我当然找到了RPC documentation on MSDN。但是,我想知道是否有比RPC更好的方法来实现我想要的东西。或者,如果您认为RPC是可行的方法,请告诉我为什么以及您是否知道除了MSDN以外的任何其他好的参考资料?

3 个答案:

答案 0 :(得分:3)

如果要仅将RPC限制为本地计算机,则应将RPC系统绑定到“127.0.0.1”。然后只有本地进程可以与此端口通信!

答案 1 :(得分:1)

我不熟悉所有方法,

用于WM_COPYDATA方法:

wParam
    A handle to the window passing the data.

所以你可以使用GetWindowThreadProcessID,但WM_COPYDATA可以在单个PC上使用

http://msdn.microsoft.com/en-us/library/windows/desktop/ms649011%28v=vs.85%29.aspx

要识别谁已经打开给定的句柄,你必须使用一些低级别的技巧,比如来自SysInternals的handle.exe程序(http://forum.sysinternals.com/topic18892.html)。

答案 2 :(得分:1)

如果使用Named Pipes实现自己的RPC,则可以使用服务器进程中的GetNamedPipeClientProcessId来获取本地端点客户端进程的PID。

编辑:如果你真的在追求安全,那么First Rule就是“你不能自己编写系统”。