1

名前付きパイプを介してセットアップしているサーバーがあります。ドメインの管理者には問題なく機能しますが、通常のユーザーでクライアントをテストすると、「パスへのアクセスが拒否されました」という例外が発生します。ドメイン内のすべての認証済みユーザーにアクセス権を付与するためのアクセス許可を設定しようとしているのは次のとおりです。ここで何が間違っていますか?

サーバ:

        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」という例外が発生します。

どんな助けでも大歓迎です

4

1 に答える 1

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を参照してください。

于 2009-12-21T22:03:14.703 に答える