У меня есть служба, которая запускает несколько NamedPipeServerStreams при запуске:
Thread[] serverThreads = new Thread[numThreads];
for (int i = 0; i < numThreads; i++)
{
serverThreads[i] = new Thread(ServerThread);
serverThreads[i].Start(i);
}
...
private void ServerThread(object data)
{
int buffer = 32768;
PipeSecurity bouncer = new PipeSecurity();
bouncer.AddAccessRule(new PipeAccessRule("PipeServer", PipeAccessRights.FullControl, AccessControlType.Allow));
bouncer.AddAccessRule(new PipeAccessRule("PipeClient", PipeAccessRights.ReadWrite, AccessControlType.Allow));
try
{
NamedPipeServerStream pipeServer = new NamedPipeServerStream
(
"TestPipe",
PipeDirection.InOut,
NamedPipeServerStream.MaxAllowedServerInstances,
PipeTransmissionMode.Message,
PipeOptions.Asynchronous,
buffer,
buffer,
bouncer
);
Console.WriteLine("Server " + data + " listening for TestPipe...");
pipeServer.WaitForConnection();
Console.WriteLine("Server " + data + " got connection from client.");
}
catch (Exception ex)
{
Console.WriteLine("Server " + data + " failed: " + ex.Message);
}
}
Когда этот код выполняется пользователем, который не является участником«PipeServer», по какой-то причине первый сервер все еще создан, начинает прослушивание и принимает подключения:
Server 0 listening for TestPipe...
Server 1 failed: Access to the path is denied.
Server 3 failed: Access to the path is denied.
Server 2 failed: Access to the path is denied.
Server 0 got connection from client.
Когда код выполняется пользователем, который является членом «PipeServer», все потоки запускаютсяи принимать соединения:
Server 0 listening for TestPipe...
Server 1 listening for TestPipe...
Server 2 listening for TestPipe...
Server 3 listening for TestPipe...
Server 0 got connection from client.
Server 1 got connection from client.
Server 2 got connection from client.
Server 3 got connection from client.
Почему PipeSecurity
не работает во всех потоках, когда доступ не должен быть разрешен?