Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/289.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 限制NamedPipeServerStream的范围_C#_.net_.net 3.5_Ipc_Named Pipes - Fatal编程技术网

C# 限制NamedPipeServerStream的范围

C# 限制NamedPipeServerStream的范围,c#,.net,.net-3.5,ipc,named-pipes,C#,.net,.net 3.5,Ipc,Named Pipes,我想使用NamedPipeServerStream在应用程序实例之间执行一些小型IPC。但是,如果服务器与客户端位于同一终端服务器会话上(如果应用程序在TS环境中运行),我只希望将其作为目标服务器。 实现这一点的一个想法是使用登录用户的SID,并将其与管道名称联系起来。悬停我认为这会给问题,如果用户是从两个不同的位置登录,它似乎也不是很整洁对我来说 是否有可能给NamedPipeServerStream一个作用域,它在其中响应调用,并设置这个作用域,以便RDP会话构建边界?或者有人知道如何限制作

我想使用
NamedPipeServerStream
在应用程序实例之间执行一些小型IPC。但是,如果服务器与客户端位于同一终端服务器会话上(如果应用程序在TS环境中运行),我只希望将其作为目标服务器。
实现这一点的一个想法是使用登录用户的SID,并将其与管道名称联系起来。悬停我认为这会给问题,如果用户是从两个不同的位置登录,它似乎也不是很整洁对我来说


是否有可能给
NamedPipeServerStream
一个作用域,它在其中响应调用,并设置这个作用域,以便RDP会话构建边界?或者有人知道如何限制作用域/实现所需的行为吗?

如果您只想将其限制为一个会话,您可以在本地命名空间中使用命名互斥来限制其在会话中的可见性。当客户端想要连接时 它可以创建相同的互斥体,如果它作为最后一个错误代码error_已经存在,它知道在当前会话中有一个管道服务器

您可以通过获取进程的当前会话号,以便创建名称中包含会话id的命名管道服务器

[DllImport("kernel32.dll",SetLastError=true)]
static extern int ProcessIdToSessionId(int pid, ref int session);
附录:
要获取当前会话Id,只需使用Process.GetCurrentProcess().SessionId而不是上面定义的PInvoke签名

+1谢谢,在我看来,使用会话号是一种正确的方式。据我所知,.NET2或4中没有定义PInvoke签名。您必须使用PInvokeSystem.Diagnostics.Process.GetCurrentProcess().SessionId似乎可以满足我的需要。啊,确实错过了那个。我只查看了对ProcessIdToSessionId的方法调用,但Process类使用NtQuerySystemInformation获取其数据。