|
1 | 1 | using System.IO.Pipes; |
| 2 | +using System.Security.AccessControl; |
| 3 | +using System.Security.Principal; |
2 | 4 |
|
3 | 5 | var builder = WebApplication.CreateBuilder(); |
4 | 6 |
|
|
12 | 14 | { |
13 | 15 | options.CreateNamedPipeServerStream = (context) => |
14 | 16 | { |
15 | | - var pipeSecurity = CreatePipeSecurity(context.NamedPipeEndpoint.PipeName); |
| 17 | + var pipeSecurity = CreatePipeSecurity(context.NamedPipeEndPoint.PipeName); |
16 | 18 |
|
17 | | - return NamedPipeServerStreamAcl.Create(context.NamedPipeEndPoint.PipeName, PipeDirection.InOut, |
| 19 | + return NamedPipeServerStreamAcl.Create(context.NamedPipeEndPoint.PipeName,PipeDirection.InOut, |
18 | 20 | NamedPipeServerStream.MaxAllowedServerInstances, PipeTransmissionMode.Byte, |
19 | | - context.PipeOptions, inBufferSize: 0, outBufferSize: 0, pipeSecurity); |
| 21 | + PipeOptions.None, inBufferSize: 0, outBufferSize: 0, pipeSecurity); |
20 | 22 | }; |
21 | 23 | }); |
| 24 | + |
| 25 | +static PipeSecurity CreatePipeSecurity(string pipeName) |
| 26 | +{ |
| 27 | + var pipeSecurity = new PipeSecurity(); |
| 28 | + |
| 29 | + // Get the current process identity. |
| 30 | + var currentIdentity = WindowsIdentity.GetCurrent(); |
| 31 | + var processUser = new SecurityIdentifier(WellKnownSidType.BuiltinUsersSid, currentIdentity.User.AccountDomainSid); |
| 32 | + |
| 33 | + // Allow only the current process read and write access to the pipe. |
| 34 | + pipeSecurity.AddAccessRule(new PipeAccessRule(processUser, PipeAccessRights.ReadWrite, AccessControlType.Allow)); |
| 35 | + |
| 36 | + return pipeSecurity; |
| 37 | +} |
0 commit comments