gpt4 book ai didi

c# - NamedPipeServerStream 未授权访问异常

转载 作者:行者123 更新时间:2023-12-03 23:39:26 24 4
gpt4 key购买 nike

我从我的一位用户那里收到一条 Event Viever 条目,说发生了未经授权的访问异常。该进程从作为 SYSTEM 的服务启动。我能够将错误范围缩小到创建 NamedPipeServerStream 的部分:

  // <error in this block>
PipeSecurity pipeSa = new PipeSecurity();
pipeSa.AddAccessRule(new PipeAccessRule(new SecurityIdentifier(WellKnownSidType.WorldSid, null), PipeAccessRights.ReadWrite, AccessControlType.Allow));
NamedPipeServerStream np = new NamedPipeServerStream("streamname", PipeDirection.InOut,1,PipeTransmissionMode.Message,PipeOptions.None,16383,1, pipeSa);
// </error in this block>


while (true){
try{
if (!np.IsConnected)
np.WaitForConnection();
}catch(Exception e){

}
}
我很确定错误在上面的 3 行块中。它不会发生在我的任何电脑上,所以我不能重复这个错误。上面代码中的哪些内容不被视为最佳实践并可能导致错误?
错误信息图片:
enter image description here

最佳答案

你问的问题细节很少。因此,很难缩小真正原因的范围。但是,我愿意尝试一下。
如果您查看 Unauthorized Access Exception 的文档

The exception that is thrown when the operating system denies access because of an I/O error or a specific type of security error.


我们可以看到您的代码已经吞噬了所有异常。所以我们可以假设这是在创建管道时抛出的。
我最好的猜测是,有时您无法访问管道,因为系统无法正确访问管道。在做了一些快速研究之后。此 question似乎有很多值得一试的好信息。转述几个答案:

There are two things which can cause the instantiation of a second or subsequentNamedPipeServerStream on the same pipe to fail:


  • 创建管道服务器的第一个实例时,maxNumberOfServerInstances ctor 参数必须设置为大于 1。如果没有,除非第一个实例已经完全关闭,否则第二个调用将失败。
  • 调用 ctor 的进程必须具有 PipeAccessRights.CreateNewInstance 表示的访问权限。这是管道服务器应该谨慎保护的强大权利,因为它允许其拥有者充当管道服务器。

  • 您可能缺少需要添加访问权限的权限,也许您需要提供对系统的控制:
    pipeSa.AddAccessRule(new PipeAccessRule("SYSTEM", PipeAccessRights.FullControl, AccessControlType.Allow));
    pipeSa.AddAccessRule(pa);

    关于c# - NamedPipeServerStream 未授权访问异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66726692/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com