如何确保只有我的程序可以访问命名管道?

时间:2012-07-27 18:12:34

标签: c# .net security named-pipes inter-process-communicat

我打算将我的程序拆分为2个进程:第一个是GUI,第二个是使用管理员帐户运行的后台进程。两者都应该相互沟通。

我考虑使用命名管道,但有一件事困扰我:

有没有办法确保我的程序只能访问命名管道?

2 个答案:

答案 0 :(得分:3)

创建命名管道时,通常可以使用security descriptor保护对它的访问(两侧)。但是,安全描述符适用于用户,而不适用于应用程序(出于充分的原因,从安全角度来看,您希望保护用户,而不是应用程序)。

也就是说,您可以创建一个客户端和服务器运行的用户,只要您保持 帐户安全,您就可以了(您可以使用该用户的安全描述符。)

因此,如果您的程序是使用该用户标识的 only 程序,那么从技术上讲,是的,管道只能由您的程序使用。但是,您必须管理帐户的安全性。

答案 1 :(得分:1)

如果您只需要支持Windows Vista或更高版本,则可以调用Windows API,以便在建立连接后查找管道另一端的进程的ProcessId和/或SessionID(例如,GetNamedPipeClientProcessId和家人)。您可以使用它们来实现显式检查,以确保只有您希望通过管道进行通信的应用程序才能这样做。