首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用JNA通过Java恢复Windows目录的继承

使用JNA通过Java恢复Windows目录的继承
EN

Stack Overflow用户
提问于 2016-10-27 19:57:02
回答 1查看 146关注 0票数 3

我有一个问题,我希望外面的人能给我一些建议!基本上,在我的程序中,我将使用一个windows文件夹,更改所有权,设置访问控制规则等,这是它的漂亮的香草Java使用:

Files.getFileAttributeView(target, AclFileAttributeView.class);

当我想要忘记某个目录时,问题就出现了,为此,我想重新启用对父目录的继承,并删除所有ACL规则。我可以删除规则并使用Java重新设置所有者,但是看起来我必须转到本机来设置继承标志……

我想我可以得到一个指向安全描述符的指针,如下所示:

代码语言:javascript
复制
    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);

但我真的有点困惑,我是在正确的轨道上还是我是个笨蛋?这对我来说是陌生的,请帮帮我!

EN

回答 1

Stack Overflow用户

发布于 2016-10-28 23:22:38

我决定最简单的方法是用C#实现代码,然后将简单的DLL导入java并调用它,例如:

代码语言:javascript
复制
    [RGiesecke.DllExport.DllExport]
    static void ReEnableInheretance(String dirPath)
    {
        DirectorySecurity dirSecurity = new DirectorySecurity();
        dirSecurity.SetAccessRuleProtection(false, false);
        Directory.SetAccessControl(dirPath, dirSecurity); 
    }

在Java中:

代码语言:javascript
复制
public interface MyNewLib extends Library {
    public void ReEnableInheretance(String dirPath);
}

MyNewLib myNewLib = (MyNewLib )Native.loadLibrary("MyNewLib ",MyNewLib.class);
myNewLib .ReEnableInheretance(path.toString());

将依赖放在.net上,但是这对我来说不是问题。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40284006

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档