我坚持为SECURITY_ATTRIBUTES
方法指定CreateNamedPipe
(最后一个参数)。我想允许每个人完全访问。
我能组装的最深入的代码是:
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;
}
将lpSecurityDescriptor
设置为null
会提供默认访问权限,但我希望完全控制所有人。
答案 0 :(得分:0)
这不完全是答案,但我希望它有所帮助。
如果您不想对saAttr
执行任何操作,只需将null
放在最后一个参数(而不是saAttr
)上,然后使用此管道获取默认安全性描述。来自Microsoft的Citate(https://msdn.microsoft.com/en-us/library/windows/desktop/aa365150(v=vs.85).aspx, lpSecurityAttributes ):
命名管道的默认安全描述符中的ACL授予对LocalSystem帐户,管理员和创建者所有者的完全控制权。他们还授予Everyone组和匿名帐户成员的读取权限。