使用Win32 C ++ API,我想知道哪个IPC method允许多进程通信中的任何端点获取与之通信的进程的PID或HANDLE。换句话说,如果进程A从进程B获得消息:
通信的目的是一个简单的远程过程调用。但是,我不希望远程系统/主机上的进程调用在本地主机上运行的进程提供的过程。
我当然找到了RPC documentation on MSDN。但是,我想知道是否有比RPC更好的方法来实现我想要的东西。或者,如果您认为RPC是可行的方法,请告诉我为什么以及您是否知道除了MSDN以外的任何其他好的参考资料?
答案 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就是“你不能自己编写系统”。