C# 更改命名管道访问权限

问题描述 投票:0回答:1

当我尝试向管道添加安全性时,出现未经授权的访问异常。我认为这需要在创建管道时定义,或者至少添加更改管道的权限,但我也不知道如何做到这一点。网上的所有例子都有太多的论点。我的编译器说 NamedPipeServerStream 的最大值为 7 并且没有任何安全选项。 微软同意我的观点。

using System.IO.Pipes;
NamedPipeServerStream pipeServer;
pipeServer = new NamedPipeServerStream("PipeName", PipeDirection.InOut, 1, PipeTransmissionMode.Byte, PipeOptions.Asynchronous);
PipeSecurity clientPipeSecurity = new PipeSecurity();                    
//PipeAccessRule clientAccessRule = new PipeAccessRule(new SecurityIdentifier(WellKnownSidType.WorldSid, null), PipeAccessRights.ReadWrite, AccessControlType.Allow);
//clientPipeSecurity.AddAccessRule(clientAccessRule);     
PipeAccessRule clientAccessRule = new PipeAccessRule("Domain Users", PipeAccessRights.ReadWrite, AccessControlType.Allow);
clientPipeSecurity.AddAccessRule(clientAccessRule);            
                
pipeServer.SetAccessControl(clientPipeSecurity);

是否包含了错误的库?为什么它不能像其他帖子所说的那样编译?我所能想到的是,这些示例太旧了。出于某种原因,.NET 已经放弃了该选项。

pipeServer = new NamedPipeServerStream("DAQUpdater",
      PipeDirection.InOut,
      1,
      PipeTransmissionMode.Message,
      PipeOptions.Asynchronous,
      0x4000,
      0x400,
      pipeSecurity);

“NamedPipeServerStream”不包含带有 8 个参数的构造函数

c# named-pipes
1个回答
0
投票

https://stackoverflow.com/a/71370760/4500335有答案。谢谢汉斯。
在 NET 6.0 之后,您必须使用 NamedPipeServerStreamAcl 来更改创建时的安全性。

NamedPipeServerStream stream = NamedPipeServerStreamAcl.Create(
    "SecurityTestPipe", PipeDirection.InOut,
    NamedPipeServerStream.MaxAllowedServerInstances,
    PipeTransmissionMode.Byte, PipeOptions.Asynchronous, 0, 0, pipeSecurity);
© www.soinside.com 2019 - 2024. All rights reserved.