使用JNA通过Java恢复对Windows目录的继承
Restoring inheritance to a Windows directory via Java using JNA
我有一个问题,我希望有人可以给我建议!基本上在我的程序中,我将采取一个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);
但我真的有点困惑,我是在正确的轨道上还是我是一个白痴?这是我不熟悉的地方,请帮忙!
我决定最简单的方法是在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上,但这对我来说不是问题。
相关文章:
- 继承函数的重载解析
- 在VS代码中交叉编译Windows与Linux上的MinGW的SDL程序
- 在Linux for Windows上编译C++代码时出错
- 继承期间显示未知行为的子类
- 在Windows上用C++裁剪HBITMAP
- C++ Windows 驱动程序MSB3030无法复制该文件,因为它找不到
- 如何加载(或映射)文件部分的最大大小,但适合在Windows上的RAM
- std::threads可以从Windows DLL中的全局变量创建/销毁吗?
- 头文件-继承c++
- 为什么在保护模式下继承升级不起作用
- 如何复制文件并继承 Windows EFS
- 删除/修改 ACL 中继承的 ACE (Windows)
- Windows -- 继承子进程中的控制台文件句柄
- 从Windows中的父进程继承句柄
- 使用 Windows V2 凭据提供程序的钻石继承
- C++继承的ostream在android上崩溃,但在windows上没有
- <Windows.h> c++ 线程和继承
- 使用JNA通过Java恢复对Windows目录的继承
- 如何在Windows中访问继承的匿名管道HANDLE,而不是stdout,stderr和stdin?
- 如何在c++ /CLI中使用设计器继承现有的Windows窗体控件