2016-06-25 21 views
1

Ich bin bei der Angabe SECURITY_ATTRIBUTES (der letzte Parameter) für CreateNamedPipe Methode fest. Ich möchte den vollen Zugriff für alle erlauben.wie SECURITY_ATTRIBUTES für CreateNamedPipe angeben?

Die in eingehenden Code I ist dies zusammenbauen könnte:

public static HANDLE CreateNamedPipe(String pipeName, PipeDirection pipeDirection, int maxConnections) throws NamedPipeException { 
    WinBase.SECURITY_ATTRIBUTES saAttr = new WinBase.SECURITY_ATTRIBUTES(); 
    saAttr.dwLength = new WinDef.DWORD(saAttr.size()); 
    saAttr.bInheritHandle = true; 
    saAttr.lpSecurityDescriptor = null; // it gives default access rights. I need full control for everyone 

    HANDLE handle = Kernel32.INSTANCE.CreateNamedPipe(pipeName, 
     pipeDirection.getValue(), 
     WinBase.PIPE_TYPE_BYTE | WinBase.PIPE_WAIT, 
     maxConnections, 
     Integer.MAX_VALUE, 
     Integer.MAX_VALUE, 
     0, 
     saAttr); 

    int error = Kernel32.INSTANCE.GetLastError(); 
    if(error != 0) { 
     throw new NamedPipeException(error); 
    } 
    return handle; 
} 

Einstellung lpSecurityDescriptor zu null gibt Rechte Standardzugriff, aber ich möchte die volle Kontrolle für alle.

Antwort

0

Dies ist nicht die vollständige Antwort, aber ich hoffe, es hilft.

Wenn Sie nicht wollen, etwas zu tun mit saAttr, dann legen Sie einfach null für die letzten Parameter (statt saAttr), und dies mit dem Rohr erhält eine Standardsicherheitsbeschreibung. Citate von Microsoft (https://msdn.microsoft.com/en-us/library/windows/desktop/aa365150(v=vs.85).aspx, lpSecurityAttributes):

Die ACLs in der Standardsicherheitsbeschreibung für eine Named Pipe Erteilung Vollzugriff auf den lokalen Systemkonto, Administratoren und der Schöpfer Eigentümer. Sie gewähren auch Lesezugriff auf Mitglieder der Gruppe Jeder und das anonyme Konto.