限制NamedPipeServerStream的范围
本文关键字:范围 NamedPipeServerStream 限制 | 更新日期: 2023-09-27 17:58:51
我想使用NamedPipeServerStream
在应用程序实例之间进行一些小型IPC。但是,我只想将服务器作为目标,如果它与客户端位于同一个终端服务器会话上(如果应用程序在TS环境中运行)
实现这一点的一个想法是使用登录用户的SID,并将其与管道名称连接起来。悬停我认为如果用户从两个不同的位置登录,这会带来问题,而且对我来说似乎也不太整洁
是否有可能为NamedPipeServerStream
提供一个作用域来响应调用,并设置此作用域以使RDP会话构建边界?或者有人知道如何限制范围/实现期望的行为吗?
如果只想将其限制为一个会话,则可以在本地命名空间中创建一个命名互斥体,以限制其在会话中的可见性。当客户端想要连接时它可以创建相同的互斥,如果它得到最后一个错误代码error_ALREADY_EXISTS,它就知道在当前会话中有一个管道服务器。
您可以通过ProcessIdToSessionId获取进程的当前会话编号,这样您就可以创建一个名称中包含会话id的命名管道服务器。
[DllImport("kernel32.dll",SetLastError=true)]
static extern int ProcessIdToSessionId(int pid, ref int session);
Addenum:要获取当前会话Id,您可以简单地使用Process.GetCurrentProcess().SessionId,而不是上面定义的PInvoke签名。