private NamedPipeServerStream CreateSecuredPipe() { var user = WindowsIdentity.GetCurrent().User; var security = new PipeSecurity(); security.AddAccessRule(new PipeAccessRule( user, PipeAccessRights.FullControl, AccessControlType.Allow)); security.SetOwner(user); security.SetGroup(user); return(new NamedPipeServerStream( pipe, PipeDirection.In, 1, PipeTransmissionMode.Byte, PipeOptions.Asynchronous, MaxBytes, MaxBytes, security)); }
PipeSecurity makePipeSecurity() { var pipeSecurity = new PipeSecurity(); var admins = new SecurityIdentifier(WellKnownSidType.BuiltinAdministratorsSid, null); var system = new SecurityIdentifier(WellKnownSidType.LocalSystemSid, null); if (IsElevated) { pipeSecurity.SetOwner(admins); pipeSecurity.SetGroup(system); } pipeSecurity.AddAccessRule(new PipeAccessRule(admins, PipeAccessRights.FullControl, AccessControlType.Allow)); pipeSecurity.AddAccessRule(new PipeAccessRule(system, PipeAccessRights.FullControl, AccessControlType.Allow)); pipeSecurity.AddAccessRule(new PipeAccessRule(new SecurityIdentifier(WellKnownSidType.AuthenticatedUserSid, null), PipeAccessRights.ReadWrite, AccessControlType.Allow)); return(pipeSecurity); }