C# 如何确保只有我的程序才能访问命名管道?

C# 如何确保只有我的程序才能访问命名管道?,c#,.net,security,named-pipes,inter-process-communicat,C#,.net,Security,Named Pipes,Inter Process Communicat,我计划将我的程序分成两个进程:第一个是GUI,第二个是使用管理员帐户运行的后台进程。双方应该相互沟通 我正在考虑为此使用命名管道,但有一件事困扰着我: 有没有办法确保只有我的程序才能访问命名管道?在创建命名管道时,通常可以使用一个。但是,安全描述符是针对用户的,而不是针对应用程序的(出于充分的理由,从安全的角度来看,您希望保护用户,而不是应用程序) 也就是说,您可以创建一个在其下运行客户端和服务器的用户,只要您保持该帐户的安全,您就可以了(您可以使用该用户的安全描述符来保护管道) 因此,如果您的

我计划将我的程序分成两个进程:第一个是GUI,第二个是使用管理员帐户运行的后台进程。双方应该相互沟通

我正在考虑为此使用命名管道,但有一件事困扰着我:


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

在创建命名管道时,通常可以使用一个。但是,安全描述符是针对用户的,而不是针对应用程序的(出于充分的理由,从安全的角度来看,您希望保护用户,而不是应用程序)

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


因此,如果您的程序是唯一一个使用该用户身份的程序,那么从技术上讲,是的,管道将仅由您的程序使用。但是,您必须管理帐户的安全性。

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

攻击者可以通过多种方式提供Arbitray PID,因此GetNamedPipeClientProcessId保存不够,请参阅