use of com.github.zhanhb.jnc.platform.win32.Win32Exception in project judge by zjnu-acm.
the class RestrictedToken method addSidToDacl.
private static void addSidToDacl(long pSid, long oldDacl, ACCESS_MODE accessMode, int access, AddressByReference newDacl) {
EXPLICIT_ACCESS newAccess = new EXPLICIT_ACCESS();
newAccess.setAccessMode(accessMode);
newAccess.setAccessPermissions(access);
newAccess.setInheritance(NO_INHERITANCE);
TRUSTEE trustee = newAccess.getTrustee();
trustee.setMultipleTrustee(0);
trustee.setMultipleTrusteeOperation(NO_MULTIPLE_TRUSTEE);
trustee.setTrusteeForm(TRUSTEE_IS_SID);
trustee.setName(pSid);
int error = Advapi32.INSTANCE.SetEntriesInAclW(1, newAccess, oldDacl, newDacl);
if (error != ERROR_SUCCESS) {
throw new Win32Exception(error);
}
}
use of com.github.zhanhb.jnc.platform.win32.Win32Exception in project osumer by mob41.
the class Installer method install.
public void install() throws DebuggableException {
if (!Osumer.isWindows()) {
throw new DebuggableException(null, "Validate OS is Windows", "Throw debuggable exception", "Validate is osumer elevated", "Installer does not support non-Windows environment", false);
}
if (!Osumer.isWindowsElevated()) {
throw new DebuggableException(null, "Validate OS is Windows", "Validate is osumer elevated", "Create File instance of \"osumer.exe\"", "osumer is not elevated. Restart osumer with administrative privileges.", false);
}
String runningFilePath = null;
try {
runningFilePath = URLDecoder.decode(Installer.class.getProtectionDomain().getCodeSource().getLocation().getPath(), "UTF-8");
} catch (UnsupportedEncodingException e1) {
e1.printStackTrace();
throw new DebuggableException(null, "Validate is osumer elevated", "Get current running file path", "Validate is running file name is ending with .exe", "Unsupported encoding UTF-8", false, e1);
}
if (!runningFilePath.endsWith(".exe")) {
throw new DebuggableException(runningFilePath, "Get current running file path", "Validate is running file name is ending with .exe", "Create File instance of \"osumer.exe\"", "A Windows executable (.exe) version of osumer is required for installation. It can be downloaded from the releases. If you have it, rename it to \"osumer.exe\" to continue.", false);
}
File file = new File(runningFilePath);
if (!file.exists()) {
throw new DebuggableException(runningFilePath, "Validate is running file name is ending with .exe", "Create File instance of \"osumer.exe\"", "Create File instance of constant field winPath", "Unexpected? The running file-name does not exist!", false);
}
File destFolder = new File(winPath);
if (!destFolder.exists()) {
destFolder.mkdirs();
}
File verInfo = new File(winPath + "\\" + verInfoFile);
try {
if (verInfo.exists()) {
verInfo.delete();
}
JSONObject verInfoJson = new JSONObject();
verInfoJson.put("version", Osumer.OSUMER_VERSION);
verInfoJson.put("branch", Osumer.OSUMER_BRANCH);
verInfoJson.put("build", Osumer.OSUMER_BUILD_NUM);
verInfo.createNewFile();
FileOutputStream out = new FileOutputStream(verInfo);
out.write(Base64.encodeBase64(verInfoJson.toString().getBytes(StandardCharsets.UTF_8)));
out.flush();
out.close();
} catch (IOException e) {
throw new DebuggableException(null, "Create new File instance with \"" + winPath + "\\" + verInfoFile + "\"", "Create application version info", "Create new File instance with \"" + winPath + "\\" + winFile + "\"", "Error creating version info", false, e);
}
File dest = new File(winPath + "\\" + winFile);
try {
if (dest.exists()) {
dest.delete();
}
dest.createNewFile();
FileOutputStream out = new FileOutputStream(dest);
Files.copy(file.toPath(), out);
out.flush();
out.close();
} catch (IOException e) {
throw new DebuggableException(null, "Create new File instance with \"" + winPath + "\\" + winFile + "\"", "(Try scope) Copying file", "Creating Main osumer link in Start Menu", "Error copying file", false, e);
}
File startPathFolder = new File(START_MENU_PATH);
if (!startPathFolder.exists() || !startPathFolder.isDirectory()) {
startPathFolder.mkdir();
}
ShellLink slMain = ShellLink.createLink(Installer.winPath + "\\" + Installer.winFile);
slMain.setWorkingDir(Installer.winPath);
slMain.setIconLocation(Installer.winPath + "\\" + Installer.winFile);
slMain.getHeader().setIconIndex(0);
try {
slMain.saveTo(START_MENU_PATH + "\\osumer.lnk");
} catch (IOException e1) {
throw new DebuggableException(null, "(Try scope) Copying file", "Creating Main osumer link in Start Menu", "Creating Daemon osumer link in Start Menu", "Error copying file", false, e1);
}
ShellLink slDaemon = ShellLink.createLink(Installer.winPath + "\\" + Installer.winFile);
slDaemon.setWorkingDir(Installer.winPath);
slDaemon.setCMDArgs("-daemon");
slDaemon.setIconLocation(Installer.winPath + "\\" + Installer.winFile);
slDaemon.getHeader().setIconIndex(0);
try {
slDaemon.saveTo(START_MENU_PATH + "\\osumer (Start as Daemon).lnk");
} catch (IOException e1) {
throw new DebuggableException(null, "Creating Main osumer link in Start Menu", "Creating Daemon osumer link in Start Menu", "(Next Try scope) Writing to registry", "Error copying file", false, e1);
}
try {
// Create root key
// HKLM/SOFTWARE/Clients/StartMenuInternet/osumerExpress
boolean success = Advapi32Util.registryCreateKey(WinReg.HKEY_LOCAL_MACHINE, WIN_REG_CLIENTS_PATH, WIN_REG_INTERNET_CLIENT_KEY);
final String clientRegPath = WIN_REG_CLIENTS_PATH + "\\" + WIN_REG_INTERNET_CLIENT_KEY;
// HKLM/SOFTWARE/Clients/StartMenuInternet/osumerExpress/@
Advapi32Util.registrySetStringValue(WinReg.HKEY_LOCAL_MACHINE, clientRegPath, "", WIN_REG_INTERNET_CLIENT_DEFAULT_VALUE);
// Capabilities
// HKLM/SOFTWARE/Clients/StartMenuInternet/osumerExpress/Capabilities
success = Advapi32Util.registryCreateKey(WinReg.HKEY_LOCAL_MACHINE, clientRegPath, WIN_REG_CAP_KEY);
final String capRegPath = clientRegPath + "\\" + WIN_REG_CAP_KEY;
// HKLM/SOFTWARE/Clients/StartMenuInternet/osumerExpress/Capabilities/@ApplicationName,@ApplicationDescription,@ApplicationIcon
Advapi32Util.registrySetStringValue(WinReg.HKEY_LOCAL_MACHINE, capRegPath, WIN_REG_CAP_APPNAME_PARA, WIN_REG_CAP_APPNAME_VALUE);
Advapi32Util.registrySetStringValue(WinReg.HKEY_LOCAL_MACHINE, capRegPath, WIN_REG_CAP_APPDESC_PARA, WIN_REG_CAP_APPDESC_VALUE);
Advapi32Util.registrySetStringValue(WinReg.HKEY_LOCAL_MACHINE, capRegPath, WIN_REG_CAP_APPICON_PARA, WIN_REG_CAP_APPICON_VALUE);
// Capabilities: Startmenu
// HKLM/SOFTWARE/Clients/StartMenuInternet/osumerExpress/Capabilities/Startmenu
success = Advapi32Util.registryCreateKey(WinReg.HKEY_LOCAL_MACHINE, capRegPath, WIN_REG_CAP_STARTMENU_KEY);
// Legacy use
final String capStartMenuRegPath = capRegPath + "\\" + WIN_REG_CAP_STARTMENU_KEY;
// HKLM/SOFTWARE/Clients/StartMenuInternet/osumerExpress/Capabilities/Startmenu/@StartMenuInternet
Advapi32Util.registrySetStringValue(WinReg.HKEY_LOCAL_MACHINE, capStartMenuRegPath, WIN_REG_CAP_STARTMENU_STARTMENUINTERNET_PARA, WIN_REG_CAP_STARTMENU_STARTMENUINTERNET_VALUE);
// Capabilities: File associations
// HKLM/SOFTWARE/Clients/StartMenuInternet/osumerExpress/Capabilities/FileAssociations
success = Advapi32Util.registryCreateKey(WinReg.HKEY_LOCAL_MACHINE, capRegPath, WIN_REG_CAP_FILEASSOC_KEY);
// No file associations currently
// Capabilities: URL Associations
// HKLM/SOFTWARE/Clients/StartMenuInternet/osumerExpress/Capabilities/URLAssociations
success = Advapi32Util.registryCreateKey(WinReg.HKEY_LOCAL_MACHINE, capRegPath, WIN_REG_CAP_URLASSOC_KEY);
final String urlAssocRegPath = capRegPath + "\\" + WIN_REG_CAP_URLASSOC_KEY;
// HKLM/SOFTWARE/Clients/StartMenuInternet/osumerExpress/Capabilities/URLAssociations/@http,@https
Advapi32Util.registrySetStringValue(WinReg.HKEY_LOCAL_MACHINE, urlAssocRegPath, WIN_REG_CAP_URLASSOC_HTTP_PARA, WIN_REG_CAP_URLASSOC_HTTP_VALUE);
Advapi32Util.registrySetStringValue(WinReg.HKEY_LOCAL_MACHINE, urlAssocRegPath, WIN_REG_CAP_URLASSOC_HTTPS_PARA, WIN_REG_CAP_URLASSOC_HTTPS_VALUE);
// Default icon
// HKLM/SOFTWARE/Clients/StartMenuInternet/osumerExpress/DefaultIcon
success = Advapi32Util.registryCreateKey(WinReg.HKEY_LOCAL_MACHINE, clientRegPath, WIN_REG_DEFAULTICON_KEY);
final String defaultIconRegPath = clientRegPath + "\\" + WIN_REG_DEFAULTICON_KEY;
// HKLM/SOFTWARE/Clients/StartMenuInternet/osumerExpress/DefaultIcon/@
Advapi32Util.registrySetStringValue(WinReg.HKEY_LOCAL_MACHINE, defaultIconRegPath, "", WIN_REG_DEFAULTICON_DEFAULT_VALUE);
// Install info
// HKLM/SOFTWARE/Clients/StartMenuInternet/osumerExpress/InstallInfo
success = Advapi32Util.registryCreateKey(WinReg.HKEY_LOCAL_MACHINE, clientRegPath, WIN_REG_INSTALLINFO_KEY);
final String installInfoRegPath = clientRegPath + "\\" + WIN_REG_INSTALLINFO_KEY;
// HKLM/SOFTWARE/Clients/StartMenuInternet/osumerExpress/InstallInfo/@HideIconsCommand
Advapi32Util.registrySetStringValue(WinReg.HKEY_LOCAL_MACHINE, installInfoRegPath, WIN_REG_INSTALLINFO_HIDEICON_PARA, WIN_REG_INSTALLINFO_HIDEICON_VALUE);
// HKLM/SOFTWARE/Clients/StartMenuInternet/osumerExpress/InstallInfo/@ShowIconsCommand
Advapi32Util.registrySetStringValue(WinReg.HKEY_LOCAL_MACHINE, installInfoRegPath, WIN_REG_INSTALLINFO_SHOWICON_PARA, WIN_REG_INSTALLINFO_SHOWICON_VALUE);
// HKLM/SOFTWARE/Clients/StartMenuInternet/osumerExpress/InstallInfo/@ReinstallCommand
Advapi32Util.registrySetStringValue(WinReg.HKEY_LOCAL_MACHINE, installInfoRegPath, WIN_REG_INSTALLINFO_REINSTALL_PARA, WIN_REG_INSTALLINFO_REINSTALL_VALUE);
// HKLM/SOFTWARE/Clients/StartMenuInternet/osumerExpress/InstallInfo/@IconsVisible
Advapi32Util.registrySetIntValue(WinReg.HKEY_LOCAL_MACHINE, installInfoRegPath, WIN_REG_INSTALLINFO_ICONSVISIBLE_PARA, WIN_REG_INSTALLINFO_ICONSVISIBLE_VALUE);
// Shell: Open: Command
// HKLM/SOFTWARE/Clients/StartMenuInternet/osumerExpress/shell
success = Advapi32Util.registryCreateKey(WinReg.HKEY_LOCAL_MACHINE, clientRegPath, WIN_REG_SHELL_KEY);
final String shellRegPath = clientRegPath + "\\" + WIN_REG_SHELL_KEY;
// HKLM/SOFTWARE/Clients/StartMenuInternet/osumerExpress/shell/open
success = Advapi32Util.registryCreateKey(WinReg.HKEY_LOCAL_MACHINE, shellRegPath, WIN_REG_SHELL_OPEN_KEY);
final String shellOpenRegPath = shellRegPath + "\\" + WIN_REG_SHELL_OPEN_KEY;
// HKLM/SOFTWARE/Clients/StartMenuInternet/osumerExpress/shell/open/command
success = Advapi32Util.registryCreateKey(WinReg.HKEY_LOCAL_MACHINE, shellOpenRegPath, WIN_REG_SHELL_OPEN_COMMAND_KEY);
final String shellOpenCmdRegPath = shellOpenRegPath + "\\" + WIN_REG_SHELL_OPEN_COMMAND_KEY;
// HKLM/SOFTWARE/Clients/StartMenuInternet/osumerExpress/shell/open/command/@
Advapi32Util.registrySetStringValue(WinReg.HKEY_LOCAL_MACHINE, shellOpenCmdRegPath, "", WIN_REG_SHELL_OPEN_COMMAND_DEFAULT_VALUE);
// Registered Applications
Advapi32Util.registrySetStringValue(WinReg.HKEY_LOCAL_MACHINE, WIN_REG_REGISTEREDAPPS_PATH, WIN_REG_REGISTEREDAPPS_OSUMEREXPRESS_PARA, WIN_REG_REGISTEREDAPPS_OSUMEREXPRESS_VALUE);
// Classes
// HKLM/SOFTWARE/Classes/osumer
success = Advapi32Util.registryCreateKey(WinReg.HKEY_LOCAL_MACHINE, WIN_REG_CLASSES_PATH, WIN_REG_CLASSES_OSUMER_KEY);
final String osumerClassRegPath = WIN_REG_CLASSES_PATH + "\\" + WIN_REG_CLASSES_OSUMER_KEY;
// HKLM/SOFTWARE/Classes/osumer/@
Advapi32Util.registrySetStringValue(WinReg.HKEY_LOCAL_MACHINE, osumerClassRegPath, "", WIN_REG_CLASSES_OSUMER_DEFAULT_VALUE);
// HKLM/SOFTWARE/Classes/osumer/@FriendlyTypeName
Advapi32Util.registrySetStringValue(WinReg.HKEY_LOCAL_MACHINE, osumerClassRegPath, WIN_REG_CLASSES_OSUMER_FRIENDLYTYPENAME_PARA, WIN_REG_CLASSES_OSUMER_FRIENDLYTYPENAME_VALUE);
Advapi32Util.registryCreateKey(WinReg.HKEY_LOCAL_MACHINE, osumerClassRegPath, "shell");
Advapi32Util.registryCreateKey(WinReg.HKEY_LOCAL_MACHINE, osumerClassRegPath + "\\shell", "open");
Advapi32Util.registryCreateKey(WinReg.HKEY_LOCAL_MACHINE, osumerClassRegPath + "\\shell\\open", "command");
Advapi32Util.registrySetStringValue(WinReg.HKEY_LOCAL_MACHINE, osumerClassRegPath + "\\shell\\open\\command", "", WIN_REG_SHELL_OPEN_COMMAND_DEFAULT_VALUE + " \"%1\"");
// Run
// HKLM/SOFTWARE/Microsoft/Windows/CurrentVersion/Run/@osumerDaemon
Advapi32Util.registrySetStringValue(WinReg.HKEY_LOCAL_MACHINE, WIN_REG_RUN_PATH, WIN_REG_RUN_OSUMERDAEMON_PARA, WIN_REG_RUN_OSUMERDAEMON_VALUE);
} catch (Win32Exception e) {
throw new DebuggableException(null, "(Try&catch try) Writing to registry", "Throw debuggable exception", "(End of function)", "Error writing registry", false, e);
}
}
use of com.github.zhanhb.jnc.platform.win32.Win32Exception in project osumer by mob41.
the class Installer method uninstall.
public void uninstall() throws DebuggableException {
File file = new File(winPath + "\\" + winFile);
if (file.exists()) {
file.delete();
}
file = new File(winPath + "\\" + verInfoFile);
if (file.exists()) {
file.delete();
}
file = new File(START_MENU_PATH + "\\osumer.lnk");
if (file.exists()) {
file.delete();
}
file = new File(START_MENU_PATH + "\\osumer (Start as Daemon).lnk");
if (file.exists()) {
file.delete();
}
try {
final String clientRegPath = WIN_REG_CLIENTS_PATH + "\\" + WIN_REG_INTERNET_CLIENT_KEY;
final String capRegPath = clientRegPath + "\\" + WIN_REG_CAP_KEY;
final String shellRegPath = clientRegPath + "\\" + WIN_REG_SHELL_KEY;
final String shellOpenRegPath = shellRegPath + "\\" + WIN_REG_SHELL_OPEN_KEY;
// Capabilities
Advapi32Util.registryDeleteKey(WinReg.HKEY_LOCAL_MACHINE, capRegPath, WIN_REG_CAP_FILEASSOC_KEY);
Advapi32Util.registryDeleteKey(WinReg.HKEY_LOCAL_MACHINE, capRegPath, WIN_REG_CAP_URLASSOC_KEY);
Advapi32Util.registryDeleteKey(WinReg.HKEY_LOCAL_MACHINE, capRegPath, WIN_REG_CAP_STARTMENU_KEY);
Advapi32Util.registryDeleteKey(WinReg.HKEY_LOCAL_MACHINE, clientRegPath, WIN_REG_CAP_KEY);
// Shell open command
Advapi32Util.registryDeleteKey(WinReg.HKEY_LOCAL_MACHINE, shellOpenRegPath, WIN_REG_SHELL_OPEN_COMMAND_KEY);
Advapi32Util.registryDeleteKey(WinReg.HKEY_LOCAL_MACHINE, shellRegPath, WIN_REG_SHELL_OPEN_KEY);
Advapi32Util.registryDeleteKey(WinReg.HKEY_LOCAL_MACHINE, clientRegPath, WIN_REG_SHELL_KEY);
Advapi32Util.registryDeleteKey(WinReg.HKEY_LOCAL_MACHINE, clientRegPath, WIN_REG_DEFAULTICON_KEY);
Advapi32Util.registryDeleteKey(WinReg.HKEY_LOCAL_MACHINE, clientRegPath, WIN_REG_INSTALLINFO_KEY);
Advapi32Util.registryDeleteKey(WinReg.HKEY_LOCAL_MACHINE, WIN_REG_CLIENTS_PATH, WIN_REG_INTERNET_CLIENT_KEY);
// Classes and Registered applications
Advapi32Util.registryDeleteValue(WinReg.HKEY_LOCAL_MACHINE, WIN_REG_REGISTEREDAPPS_PATH, WIN_REG_REGISTEREDAPPS_OSUMEREXPRESS_PARA);
Advapi32Util.registryDeleteKey(WinReg.HKEY_LOCAL_MACHINE, WIN_REG_CLASSES_PATH + "\\" + WIN_REG_CLASSES_OSUMER_KEY + "\\shell\\open", "command");
Advapi32Util.registryDeleteKey(WinReg.HKEY_LOCAL_MACHINE, WIN_REG_CLASSES_PATH + "\\" + WIN_REG_CLASSES_OSUMER_KEY + "\\shell", "open");
Advapi32Util.registryDeleteKey(WinReg.HKEY_LOCAL_MACHINE, WIN_REG_CLASSES_PATH + "\\" + WIN_REG_CLASSES_OSUMER_KEY, "shell");
Advapi32Util.registryDeleteKey(WinReg.HKEY_LOCAL_MACHINE, WIN_REG_CLASSES_PATH, WIN_REG_CLASSES_OSUMER_KEY);
Advapi32Util.registryDeleteValue(WinReg.HKEY_LOCAL_MACHINE, WIN_REG_RUN_PATH, WIN_REG_RUN_OSUMERDAEMON_PARA);
} catch (Win32Exception e) {
e.printStackTrace();
throw new DebuggableException(null, "(Try&catch try) Writing to registry", "Throw debuggable exception", "(End of function)", "Error writing registry", false, e);
}
}
use of com.github.zhanhb.jnc.platform.win32.Win32Exception in project judge by zjnu-acm.
the class RestrictedToken method addSidToDacl.
private static void addSidToDacl(Pointer pSid, Pointer oldDacl, ACCESS_MODE accessMode, int access, PointerByReference newDacl) {
EXPLICIT_ACCESS newAccess = new EXPLICIT_ACCESS();
newAccess.setAccessMode(accessMode);
newAccess.setAccessPermissions(access);
newAccess.setInheritance(NO_INHERITANCE);
TRUSTEE trustee = newAccess.getTrustee();
trustee.setMultipleTrustee(0);
trustee.setMultipleTrusteeOperation(NO_MULTIPLE_TRUSTEE);
trustee.setTrusteeForm(TRUSTEE_IS_SID);
trustee.setTrusteeType(TRUSTEE_IS_UNKNOWN);
trustee.setName(pSid);
if (log.isDebugEnabled()) {
log.debug("addSidToDacl: {} {}", accessMode, SID.toString(pSid));
}
int error = Advapi32.INSTANCE.SetEntriesInAclW(1, newAccess, oldDacl, newDacl);
if (error != ERROR_SUCCESS) {
throw new Win32Exception(error);
}
}
use of com.github.zhanhb.jnc.platform.win32.Win32Exception in project judge by zjnu-acm.
the class WindowsExecutor method createProcess.
private PROCESS_INFORMATION createProcess(String lpCommandLine, long hIn, long hOut, long hErr, boolean redirectErrorStream, Path lpCurrentDirectory) {
STARTUPINFO startupInfo = new STARTUPINFO();
startupInfo.setCb(startupInfo.size());
startupInfo.setDesktop(DESKTOP);
PROCESS_INFORMATION lpProcessInformation = new PROCESS_INFORMATION();
// without cursor feed back
startupInfo.setFlags(STARTF_USESTDHANDLES | STARTF_FORCEOFFFEEDBACK);
startupInfo.setStdInput(hIn);
startupInfo.setStdOutput(hOut);
startupInfo.setStdError(hErr);
setInheritable(hIn);
setInheritable(hOut);
if (!redirectErrorStream) {
setInheritable(hErr);
}
try {
ProcessCreationHelper.execute(() -> {
String lpApplicationName = null;
int dwCreationFlags = CREATE_SUSPENDED | DETACHED_PROCESS | HIGH_PRIORITY_CLASS | CREATE_NEW_PROCESS_GROUP | CREATE_UNICODE_ENVIRONMENT | (Kernel32Util.getOSVersion() >= 0x602 ? 0 : CREATE_BREAKAWAY_FROM_JOB) | CREATE_NO_WINDOW;
Kernel32Util.assertTrue(Advapi32.INSTANCE.CreateProcessAsUserW(hToken.getValue(), // executable name
WString.toNative(lpApplicationName), // command line
WString.toNative(lpCommandLine), // process security attribute
null, // thread security attribute
null, // inherits system handles
true, // selected based on exe type
dwCreationFlags, EMPTY_ENV, WString.toNative(Objects.toString(lpCurrentDirectory, null)), startupInfo, lpProcessInformation));
});
} catch (Win32Exception ex) {
throw new NotExecutableException(ex);
}
return lpProcessInformation;
}
Aggregations