IdentityNotMappedException при создании NamedPipeServerStream с PipeSecurity - PullRequest
0 голосов
/ 28 февраля 2020

Я создал именованный канал, который будет запускаться автоматически при запуске. Код службы Windows выглядит следующим образом:

public class Service : ServiceBase {
    public Service() {}

    protected override void OnStart(string[] args) {
        StartNamedPipeServer(); 
    }

    private async void StartNamedPipeServer()         {
        PipeSecurity ps = new PipeSecurity();            
        ps.AddAccessRule(
            new PipeAccessRule(
                new SecurityIdentifier(WellKnownSidType.BuiltinUsersSid, null), 
                PipeAccessRights.ReadWrite | PipeAccessRights.CreateNewInstance, 
                AccessControlType.Allow));
        using (
            NamedPipeServerStream serverPipe = new NamedPipeServerStream(
                "myPipe",
                PipeDirection.InOut,
                1,
                PipeTransmissionMode.Message,
                PipeOptions.Asynchronous,
                1024,
                1024,
                ps)) {

            try {
                await Task.Factory.FromAsync(
                    (cb, state) => serverPipe.BeginWaitForConnection(cb, state),
                    ar => serverPipe.EndWaitForConnection(ar),
                    null);
            } catch(Exception e) {
                log.Error("Error on Pipe creation.", e);
            }

            var reader = new StreamReader(serverPipe);
            while ((line = reader.ReadLine()) != null) {
                //... Do stuff with message and start again
            }

        }
        StartNamedPipeServer();
    }
}

Все это прекрасно работает на большинстве клиентов. У меня есть клиент Windows 10 1909, при котором запуск сервера выдает ошибку в eventLog Windows

- <Event xmlns="http://schemas.microsoft.com/win/2004/08/events/event">
- <System>
  <Provider Name=".NET Runtime" /> 
  <EventID Qualifiers="0">1026</EventID> 
  <Level>2</Level> 
  <Task>0</Task> 
  <Keywords>0x80000000000000</Keywords> 
  <TimeCreated SystemTime="2020-02-27T10:10:43.912981400Z" /> 
  <EventRecordID>3932</EventRecordID> 
  <Channel>Application</Channel> 
  <Computer>XXXXXX</Computer> 
  <Security /> 
  </System>
- <EventData>
  <Data>Anwendung: LSGService.exe Frameworkversion: v4.0.30319 Beschreibung: 
  Der Prozess wurde aufgrund einer unbehandelten Ausnahme beendet. 
  Ausnahmeinformationen: System.Security.Principal.IdentityNotMappedException 
    bei System.Security.Principal.NTAccount.Translate(System.Security.Principal.IdentityReferenceCollection, System.Type, Boolean) 
    bei System.Security.Principal.NTAccount.Translate(System.Type) 
    bei System.Security.AccessControl.CommonObjectSecurity.ModifyAccess(System.Security.AccessControl.AccessControlModification, System.Security.AccessControl.AccessRule, Boolean ByRef) 
    bei System.Security.AccessControl.CommonObjectSecurity.AddAccessRule(System.Security.AccessControl.AccessRule) 
    bei System.IO.Pipes.PipeSecurity.AddAccessRule(System.IO.Pipes.PipeAccessRule) 
    bei MyService.Service+<StartNamedPipeServer>d__7.MoveNext() 
    bei System.Runtime.CompilerServices.AsyncMethodBuilderCore+<>c.<ThrowAsync>b__6_1(System.Object) 
    bei System.Threading.QueueUserWorkItemCallback.WaitCallback_Context(System.Object) 
    bei System.Threading.ExecutionContext.RunInternal(System.Threading.ExecutionContext, System.Threading.ContextCallback, System.Object, Boolean) 
    bei System.Threading.ExecutionContext.Run(System.Threading.ExecutionContext, System.Threading.ContextCallback, System.Object, Boolean) 
    bei System.Threading.QueueUserWorkItemCallback.System.Threading.IThreadPoolWorkItem.ExecuteWorkItem() 
    bei System.Threading.ThreadPoolWorkQueue.Dispatch() bei System.Threading._ThreadPoolWaitCallback.PerformWaitCallback(
  </Data> 
  </EventData>
  </Event>

У кого-нибудь есть идея, в чем причина?

...