2009-07-17 7 views
1

Ich habe einen Server, den ich über eine Named Pipe einrichten. Es funktioniert gut für Administratoren der Domäne, aber wenn ich den Client für einen normalen Benutzer testen, gibt es die Ausnahme "Zugriff auf Pfad verweigert". Hier ist, was ich versuche, die Berechtigungen zu setzen, um allen authentifizierten Benutzern in der Domäne Zugriff zu gewähren. Was mache ich hier falsch?Einrichten der Named Pipe-Sicherheit in einer Domäne

Server:

 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); 

Auftraggeber:

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

Die Server und Domain sind natürlich unterschiedlich, aber auf dem Server, wenn es um die pipeServer.SetAccessControl Funktion bekommt es gibt mir die Ausnahme „UnauthorizedAccessException ".

Jede Hilfe sehr

geschätzt

Antwort

3

Sie müssen den Ctor für NamedPipeServerStream verwenden, die Sie die gewünschten Zugriffsrechte auf dem Rohrgriff angeben kann: öffentlichen NamedPipeServerStream ( String pipename, PipeDirection Richtung, int maxNumberOfServerInstances , PipeTransmissionMode transmissionMode, PipeOptions Optionen, int InBufferSize, int OutBufferSize, PipeSecurity PipeSecurity, HandleInheritability Vererbbarkeit, PipeAccessRights additionalAccessRights )

Wenn Sie es aufrufen, müssen Sie im letzten Argument nach PipeAccessRights.ChangePermissions fragen. Dann sollte SetAccessControl erfolgreich sein.

Siehe mein Blog http://blogs.charteris.com/blogs/chrisdi/archive/2009/12/04/exploring-the-wcf-named-pipe-binding-part-4.aspx für ein Beispiel.

+0

Man, der 'NamedPipeServerStream' Konstruktor ist ein bisschen dumm, Sie können die Sicherheit nicht ändern, wenn Sie die' PipeAccessRights' nicht setzen, aber dann im Konstruktor, wenn Sie die 'PipeAccessRights' einstellen, müssen Sie eine 'PipeSecurity', um dorthin zu gelangen ... also kannst du es auch einfach an erster Stelle setzen. – codenamezero

Verwandte Themen