我想创建一个c ++程序,它可以绕过UAC对话框重新启动自身或其他具有高权限的程序。
答案 0 :(得分:2)
如果你想在Windows系统目录中找到notepad.exe
,我建议你直接这样做:
#include <string.h>
#include <windows.h>
int main() {
char path[_MAX_PATH];
GetSystemDirectory(path, sizeof(path));
strcat_s(path, "/notepad.exe");
WinExec(path, SW_SHOWNORMAL);
}
要在指定的用户帐户下执行结果,您通常希望使用CreateProcessWithLogonW
(有一些替代方案,例如CreateProcessAsUser
和CreateProcessWithTokenW
,但CreateProcessWithLogonW
是通常是喜欢的。)
这使用宽字符,因此最简单的方法是使用宽字符,如下所示:
#include <string.h>
#include <windows.h>
template <size_t N>
DWORD GetSystemDirectory(wchar_t (&buffer)[N]) {
return GetSystemDirectoryW(buffer, N);
}
template <size_t N>
void append(wchar_t (&buffer)[N], wchar_t const *src) {
wcscat_s(buffer, N, src);
}
int main() {
wchar_t path[_MAX_PATH];
GetSystemDirectory(path);
append(path, L"/Notepad.exe");
PROCESS_INFORMATION pi;
CreateProcessWithLogonW(L"Username", L"machine_name", L"password", 0, path, NULL, CREATE_NEW_CONSOLE, NULL, NULL, NULL, &pi);
}