Skip to content

Commit 0e000ed

Browse files
committed
Kestrel named pipes
1 parent 3557ff0 commit 0e000ed

File tree

1 file changed

+19
-3
lines changed
  • aspnetcore/fundamentals/servers/kestrel/endpoints/samples/KestrelNamedEP

1 file changed

+19
-3
lines changed

aspnetcore/fundamentals/servers/kestrel/endpoints/samples/KestrelNamedEP/Program.cs

Lines changed: 19 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,6 @@
11
using System.IO.Pipes;
2+
using System.Security.AccessControl;
3+
using System.Security.Principal;
24

35
var builder = WebApplication.CreateBuilder();
46

@@ -12,10 +14,24 @@
1214
{
1315
options.CreateNamedPipeServerStream = (context) =>
1416
{
15-
var pipeSecurity = CreatePipeSecurity(context.NamedPipeEndpoint.PipeName);
17+
var pipeSecurity = CreatePipeSecurity(context.NamedPipeEndPoint.PipeName);
1618

17-
return NamedPipeServerStreamAcl.Create(context.NamedPipeEndPoint.PipeName, PipeDirection.InOut,
19+
return NamedPipeServerStreamAcl.Create(context.NamedPipeEndPoint.PipeName,PipeDirection.InOut,
1820
NamedPipeServerStream.MaxAllowedServerInstances, PipeTransmissionMode.Byte,
19-
context.PipeOptions, inBufferSize: 0, outBufferSize: 0, pipeSecurity);
21+
PipeOptions.None, inBufferSize: 0, outBufferSize: 0, pipeSecurity);
2022
};
2123
});
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

Comments
 (0)