【发布时间】:2012-07-26 11:03:00
【问题描述】:
我打算将我的程序拆分为 2 个进程:第一个是 GUI,第二个是使用管理员帐户运行的后台进程。两者应该相互交流。
我正在考虑为此使用命名管道,但有一件事情困扰着我:
有没有办法确保只有我的程序可以访问命名管道?
【问题讨论】:
标签: c# .net security named-pipes inter-process-communicat
我打算将我的程序拆分为 2 个进程:第一个是 GUI,第二个是使用管理员帐户运行的后台进程。两者应该相互交流。
我正在考虑为此使用命名管道,但有一件事情困扰着我:
有没有办法确保只有我的程序可以访问命名管道?
【问题讨论】:
标签: c# .net security named-pipes inter-process-communicat
创建命名管道时,您通常可以使用security descriptor 保护对它的访问(在双方)。但是,安全描述符适用于用户,而不适用于应用程序(出于充分的理由,从安全的角度来看,您希望保护用户,而不是应用程序)。 p>
也就是说,您可以创建一个用户来运行您的客户端和服务器,并且只要您保证 那个 帐户的安全,就可以了(您可以使用该用户的安全描述符)。
所以,如果您的程序是 only 使用该用户身份的程序,那么从技术上讲,是的,管道只能由您的程序使用。但是,您必须管理帐户的安全性。
【讨论】:
如果您只需要支持 Windows Vista 或更高版本,则在建立连接后,您可以调用 Windows API 来找出管道另一端进程的 ProcessId 和/或 SessionID(例如 GetNamedPipeClientProcessId和家人)。您可以使用这些来实现显式检查,以确保只有您想通过管道进行通信的应用程序才能这样做。
【讨论】: