public ServerStreamPool(string pipeName, NamedPipeServerOptions options, Func <INamedPipeServerStream, Task> handleConnection) { _pipeName = pipeName; _options = options; _handleConnection = handleConnection; }
public ChannelContext Create(NamedPipeServerOptions options) { var impl = new TestServiceImpl(); var server = new NamedPipeServer(_pipeName, options); TestService.BindService(server.ServiceBinder, impl); server.Start(); return(new ChannelContext { Impl = impl, Client = CreateClient(), OnDispose = () => server.Kill() }); }
public void SimpleUnaryWithACLsDenied(NamedPipeChannelContextFactory factory) { PipeSecurity security = new PipeSecurity(); SecurityIdentifier sid = new SecurityIdentifier(WellKnownSidType.WorldSid, null); security.AddAccessRule(new PipeAccessRule(sid, PipeAccessRights.ReadWrite, AccessControlType.Allow)); security.AddAccessRule(new PipeAccessRule(WindowsIdentity.GetCurrent().User, PipeAccessRights.ReadWrite, AccessControlType.Deny)); NamedPipeServerOptions options = new NamedPipeServerOptions { PipeSecurity = security }; using var ctx = factory.Create(options); var exception = Assert.Throws <UnauthorizedAccessException>(() => ctx.Client.SimpleUnary(new RequestMessage { Value = 10 })); }
public void SimpleUnaryWithACLs(NamedPipeChannelContextFactory factory) { PipeSecurity security = new PipeSecurity(); SecurityIdentifier sid = new SecurityIdentifier(WellKnownSidType.WorldSid, null); security.AddAccessRule(new PipeAccessRule(sid, PipeAccessRights.ReadWrite, AccessControlType.Allow)); security.AddAccessRule(new PipeAccessRule(WindowsIdentity.GetCurrent().User, PipeAccessRights.FullControl, AccessControlType.Allow)); NamedPipeServerOptions options = new NamedPipeServerOptions { PipeSecurity = security }; using var ctx = factory.Create(options); var response = ctx.Client.SimpleUnary(new RequestMessage { Value = 10 }); Assert.Equal(10, response.Value); Assert.True(ctx.Impl.SimplyUnaryCalled); }
public static INamedPipeServerStream Create(string pipeName, NamedPipeServerOptions options) { var pipeOptions = PipeOptions.Asynchronous; #if NETCOREAPP || NETSTANDARD #if !NETSTANDARD2_0 if (options.CurrentUserOnly) { pipeOptions |= PipeOptions.CurrentUserOnly; } #endif #if NET5_0 return(new NamedPipeServerStreamFacade(NamedPipeServerStreamAcl.Create(pipeName, PipeDirection.InOut, NamedPipeServerStream.MaxAllowedServerInstances, PipeTransmissionMode.Message, pipeOptions, 0, 0, options.PipeSecurity))); #else return(new NamedPipeServerStreamFacade(new NamedPipeServerStream(pipeName, PipeDirection.InOut, NamedPipeServerStream.MaxAllowedServerInstances, PipeTransmissionMode.Message, pipeOptions))); #endif #endif #if NETFRAMEWORK return(new NamedPipeServerStreamFacade(new NamedPipeServerStream(pipeName, PipeDirection.InOut, NamedPipeServerStream.MaxAllowedServerInstances, PipeTransmissionMode.Message, pipeOptions, 0, 0, options.PipeSecurity))); #endif }