Ich versuche, JNA zu verwenden, um die effektiven Berechtigungen für eine Datei in Windows abzufragen. Schließlich plane ich die Verwendung der GetEffectiveRightsFromAcl function, aber dazu muss ich einen Zeiger auf eine TRUSTEE structure bereitstellen. Die JNA-Plattform (platform.jar) scheint diese Struktur nicht zu definieren, also versuche ich sie stattdessen selbst zu definieren. Hier ist, was ich bisher:Konvertieren von Zeichenfolge in Zeiger für JNA
public static class TRUSTEE extends Structure {
public TRUSTEE() {
super();
}
public TRUSTEE(Pointer p) {
super(p);
read();
}
public Pointer pMultipleTrustee;
public int MultipleTrusteeOperation;
public int TrusteeForm;
public int TrusteeType;
public Pointer ptstrName;
}
Ich versuche, die Struktur wie folgt zu füllen:
private TRUSTEE createTrusteeForCurrentUser() {
TRUSTEE result = new TRUSTEE();
result.TrusteeForm = TRUSTEE_FORM.TRUSTEE_IS_NAME;
result.TrusteeType = TRUSTEE_TYPE.TRUSTEE_IS_USER;
String strName = "CURRENT_USER";
// How can I set result.ptstrName using strName?
}
This Google Groups threadString
Felder in Strukturen unter Verwendung empfiehlt, wenn ein char *
für aufgerufen wird. Ich denke jedoch nicht, dass dies in meiner Situation angemessen ist, wenn man bedenkt, dass das Feld ptstrName
auf verschiedene Arten von Dingen verweisen kann, abhängig vom Wert von TrusteeForm
. Also, ich denke ich muss irgendwie von String
zu Pointer
konvertieren. Ich fand die NativeString Klasse in JNA, die funktionieren würde, außer es ist eine Paket-private Klasse.
Was ist die empfohlene Möglichkeit, ein Java String
in ein natives Format zu konvertieren und eine Pointer
zu erhalten? Benutze ich sogar den richtigen Datentyp für die Struktur TRUSTEE
? Ich bin etwas neu für JNA, also bitte entschuldigen Sie, wenn ich etwas Offensichtliches vermisse.
aktualisiert
ich eine Lösung für mein Problem gefunden, aber wenn jemand eine bessere Lösung hat würde ich immer noch, es zu hören.
Danke, das scheint der "richtige" Weg zu sein. Eine Frage - warum haben Sie nicht den 1-arg NativeString-Konstruktor anstelle des 2-Arg-Konstruktors verwendet? – fragorl
@fragorl Für meine Anwendung verwendete ich Wide-Character (Unicode) Strings, also musste ich den 'wide' Parameter auf' true' setzen. Der 1-arg-Konstruktor setzt es auf 'false'. –
Ahh, mein Fehler, ich habe mir die neueste Version von jna angeschaut, wo sie den 1-arg-Konstruktor geändert haben. Es liest jetzt: this (string, Native.getDefaultStringEncoding()) ;. Aber du hast hier einen Quellcode für eine ältere Version - natürlich, dein Beitrag stammt aus dem Jahr 2012, woops>< – fragorl