public static boolean adjustPrivileges() { WinNT.TOKEN_PRIVILEGES tp = new WinNT.TOKEN_PRIVILEGES(1); WinNT.TOKEN_PRIVILEGES oldtp = new WinNT.TOKEN_PRIVILEGES(1); WinNT.LUID luid = new WinNT.LUID(); WinNT.HANDLEByReference hTokenRef = new WinNT.HANDLEByReference(); if (!Advapi32.INSTANCE.OpenProcessToken(Kernel32.INSTANCE.GetCurrentProcess(), WinNT.TOKEN_ADJUST_PRIVILEGES | WinNT.TOKEN_QUERY, hTokenRef)) { return false; } WinNT.HANDLE hToken = hTokenRef.getValue(); if (!Advapi32.INSTANCE.LookupPrivilegeValue(null, WinNT.SE_DEBUG_NAME, luid)) { Kernel32.INSTANCE.CloseHandle(hToken); return false; } tp.PrivilegeCount = new WinDef.DWORD(1); tp.Privileges = new WinNT.LUID_AND_ATTRIBUTES[1]; tp.Privileges[0] = new WinNT.LUID_AND_ATTRIBUTES(luid, new WinDef.DWORD(WinNT.SE_PRIVILEGE_ENABLED)); IntByReference retSize = new IntByReference(0); if (!Advapi32.INSTANCE.AdjustTokenPrivileges(hToken, false, tp, tp.size(), oldtp, retSize)) { Kernel32.INSTANCE.CloseHandle(hToken); return false; } Kernel32.INSTANCE.CloseHandle(hToken); privAdjusted = true; return true; }