C # PipeAccessRule не работает в одном из множества потоков NamedPipeServerStream - PullRequest
0 голосов
/ 04 ноября 2019

У меня есть служба, которая запускает несколько 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 не работает во всех потоках, когда доступ не должен быть разрешен?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...