私には問題があり、誰かがそこに助言を与えることができると願っています!基本的に私のプログラムでは、私が使用して、このそのかなりバニラJava用などのアクセス制御ルールを設定し、所有権を変更、windowsフォルダを服用されます。JNAを使用してJava経由でWindowsディレクトリへの継承を復元する
私はディレクトリを忘れたいときに問題が発生し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);
しかし、私は本当にここに少し低迷していますが、正しい軌道に乗ってI AMまたは私は馬鹿であることですか?それは私には不慣れな土地です、助けてください!
[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());
注:Windows上のファイルパス区切り文字としてスラッシュを使用することは完全に有効であり、文字列を少し読みやすくしています。 – technomage
実際にこれを試しましたか?結果は何でしたか? – technomage
はい私はこれを試してみましたが、ppsidOwnerなどでポインタを更新しましたが、WinNT.dllに属するセキュリティオブジェクトにこれらを変換しようとして迷ってしまいました。 WinNT.dllインターフェイスをインスタンス化しようとすると、実際のdllが見つからないため失敗しますが、WinNT.dllからメソッドをコピーするとインスタンス化されない例外が発生します。基本的に私はこのビットを間違ってやっていると思うし、JNAの経験を持つ誰かが私に正しい方向を向けることを望んでいたのですか? – GavinF