在域中设置命名管道安全性

时间:2009-07-17 15:41:50

标签: c# permissions named-pipes

我有一台服务器,我正在设置命名管道。它适用于域的管理员,但是当我在普通用户上测试客户端时,它会给出“拒绝访问路径”的异常。因此,我正在尝试设置权限以授予对域中所有经过身份验证的用户的访问权限。我在这里做错了什么?

服务器:

        NamedPipeServerStream pipeServer = new NamedPipeServerStream("message-generator", PipeDirection.InOut, pipeThreads, PipeTransmissionMode.Message, PipeOptions.None);
        PipeSecurity pipeSecurity = pipeServer.GetAccessControl();
        pipeSecurity.AddAccessRule(new PipeAccessRule(@"localdomain\Authenticated Users", PipeAccessRights.FullControl, AccessControlType.Allow));
        pipeServer.SetAccessControl(pipeSecurity);

客户端:

NamedPipeClientStream pipeClient = new NamedPipeClientStream("servername", "message-generator", PipeDirection.InOut, PipeOptions.None, TokenImpersonationLevel.Impersonation))

服务器名称和域明显不同,但在服务器到达pipeServer.SetAccessControl函数时,它会给我异常“UnauthorizedAccessException”。

非常感谢任何帮助

1 个答案:

答案 0 :(得分:3)

您需要使用NamedPipeServerStream的ctor,它允许您在管道句柄上指定所需的访问权限:

public NamedPipeServerStream(
    string pipeName,
    PipeDirection direction,
    int maxNumberOfServerInstances,
    PipeTransmissionMode transmissionMode,
    PipeOptions options,
    int inBufferSize,
    int outBufferSize,
    PipeSecurity pipeSecurity,
    HandleInheritability inheritability,
    PipeAccessRights additionalAccessRights
)

当你调用它时,你需要在最后一个参数中询问PipeAccessRights.ChangePermissions。然后SetAccessControl应该会成功。

请参阅我的博客http://blogs.charteris.com/blogs/chrisdi/archive/2009/12/04/exploring-the-wcf-named-pipe-binding-part-4.aspx以获取示例。