我有一个问题,我希望外面的人能给我一些建议!基本上,在我的程序中,我将使用一个windows文件夹,更改所有权,设置访问控制规则等,这是它的漂亮的香草Java使用:
Files.getFileAttributeView(target, AclFileAttributeView.class);
当我想要忘记某个目录时,问题就出现了,为此,我想重新启用对父目录的继承,并删除所有ACL规则。我可以删除规则并使用Java重新设置所有者,但是看起来我必须转到本机来设置继承标志……
我想我可以得到一个指向安全描述符的指针,如下所示:
Advapi32 advapi32 = Advapi32.INSTANCE;
PointerByReference ppsidOwner = new PointerByReference();
PointerByReference ppsidGroup = new PointerByReference();
PointerByReference ppDacl = new PointerByReference();
PointerByReference ppSacl = new PointerByReference();
PointerByReference ppSecurityDescriptor = new PointerByReference();
int reqSecurityInfo = Advapi32.OWNER_SECURITY_INFORMATION |
Advapi32.DACL_SECURITY_INFORMATION |
Advapi32.SACL_SECURITY_INFORMATION |
Advapi32.GROUP_SECURITY_INFORMATION;
int ret = advapi32.GetNamedSecurityInfo("c:\\\\testpaths", Advapi32.SE_FILE_OBJECT,
reqSecurityInfo, ppsidOwner, ppsidGroup, ppDacl, ppSacl, ppSecurityDescriptor);
if(ret != 0){
throw new Win32Exception(ret);
}其中Advapi32.java包含:Advapi32 INSTANCE = (Advapi32) Native.loadLibrary("Advapi32", Advapi32.class, W32APIOptions.UNICODE_OPTIONS);
但我真的有点困惑,我是在正确的轨道上还是我是个笨蛋?这对我来说是陌生的,请帮帮我!
发布于 2016-10-28 23:22:38
我决定最简单的方法是用C#实现代码,然后将简单的DLL导入java并调用它,例如:
[RGiesecke.DllExport.DllExport]
static void ReEnableInheretance(String dirPath)
{
DirectorySecurity dirSecurity = new DirectorySecurity();
dirSecurity.SetAccessRuleProtection(false, false);
Directory.SetAccessControl(dirPath, dirSecurity);
}在Java中:
public interface MyNewLib extends Library {
public void ReEnableInheretance(String dirPath);
}
MyNewLib myNewLib = (MyNewLib )Native.loadLibrary("MyNewLib ",MyNewLib.class);
myNewLib .ReEnableInheretance(path.toString());将依赖放在.net上,但是这对我来说不是问题。
https://stackoverflow.com/questions/40284006
复制相似问题