У меня проблема, и я НАДЕЕТСЯ, что кто-то там может дать мне совет! В основном в моей программе я буду брать папку окна, изменения формы собственности, устанавливая правила контроля доступа и т.д., для этого его довольно ванильного Java с помощью:Восстановление наследования каталога Windows с помощью Java с помощью JNA
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);
Но я действительно барахтается немного здесь, я на правильном пути, или я идиот? Для меня это незнакомо, пожалуйста, помогите!
Примечание: совершенно верно использовать косые черты в качестве разделителей пути к файлам в окнах, и это упрощает чтение строк. – technomage
Вы на самом деле пробовали это? каковы были результаты? – technomage
Да, я пробовал это, я получаю указатели, обновленные в ppsidOwner и т. Д., Но потом я потерялся, пытаясь преобразовать их в объект безопасности, который принадлежит WinNT.dll. Я пытаюсь экземпляр интерфейса WinNT.dll, и он терпит неудачу, потому что он не может найти фактическую DLL, однако, если я скопирую метод из WinNT.dll, я получаю массив, не созданный исключение. В принципе, я думаю, что я делаю это немного неправильно и надеялся, что кто-то с опытом JNA может указать мне в правильном направлении? – GavinF