Konwertowanie ciągu znaków na wskaźnik dla JNA
Próbuję użyć JNA do sprawdzenia skutecznych uprawnień do pliku w systemie Windows. Ostatecznie planuję użyćFunkcja GetEffectiveRightsFromAcl, ale aby to zrobić, muszę podać wskaźnik do wypełnionegoStruktura TRUSTEE. Platforma JNA (platforma.jar) nie wydaje się definiować tej struktury, więc zamiast tego próbuję ją zdefiniować. Oto, co mam do tej pory:
<code>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; } </code>
Próbuję wypełnić taką strukturę:
<code>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? } </code>
Ten wątek Grup dyskusyjnych Google zaleca używanieString
pola w strukturach, gdy achar *
jest wymagane. Nie sądzę jednak, aby było to właściwe w mojej sytuacji, biorąc pod uwagęptstrName
pole może wskazywać różne typy rzeczy, w zależności od wartościTrusteeForm
. Więc myślę, że muszę jakoś się przekonaćString
doPointer
zamiast. znalazłemNativeString klasa w JNA, która działałaby, z wyjątkiem klasy prywatnej pakietu.
Jaki jest zalecany sposób konwersji JavaString
do natywnego formatu i uzyskaćPointer
do tego? Czy używam nawet odpowiedniego typu danych dlaTRUSTEE
struct? Jestem trochę nowy w JNA, więc proszę wybacz mi, jeśli brakuje mi czegoś oczywistego.
Aktualizacja
Znalazłem rozwiązanie mojego problemu, ale jeśli ktoś ma lepsze rozwiązanie, nadal chciałbym to usłyszeć.