繁体   English   中英

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

[英]How to get process id of other endpoint in inter-process communication

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

  • A是否可以知道B发送了该消息,而B没有(直接)在所发送的消息中给出有关它的任何提示? 怎么样?
  • 要求: B的PID不能在IPC消息内发送给A。

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

当然,我已经在MSDN上找到了RPC文档 但是,我想知道是否有比RPC更好的方法来实现我想要的。 或者,如果您认为要走RPC的道路,能否请您告诉我原因,以及您是否可以从MSDN中学到其他好的参考资料?

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

我对所有方法都不熟悉

对于WM_COPYDATA方法,您可以:

wParam
    A handle to the window passing the data.

因此您可以在其上使用GetWindowThreadProcessID ,但WM_COPYDATA可在单台PC上使用

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

要确定谁打开了给定的句柄,您将必须使用一些低级技巧,例如SysInternals的handle.exe程序( http://forum.sysinternals.com/topic18892.html )。

如果使用命名管道实现自己的RPC,则将能够使用服务器进程中的GetNamedPipeClientProcessId来获取本地端点客户端进程的PID。

编辑:如果您确实追求安全性,则第一条规则是“您不得编写自己的系统”。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM