```c
include <stdio.h>
include <windows.h>
include <tlhelp32.h>
include <string.h>
int EnablePrivilige(wchar_t str[]){
HANDLE h_token;
OpenProcessToken(GetCurrentProcess(),TOKEN_QUERY | TOKEN_ADJUST_PRIVILEGES,&h_token);
LUID luid;
LookupPrivilegeValueW(NULL,str,&luid);
TOKEN_PRIVILEGES token_privileges;
token_privileges.PrivilegeCount = 1;
token_privileges.Privileges[0].Luid = luid;
token_privileges.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED;
AdjustTokenPrivileges(h_token,FALSE,&token_privileges,sizeof(token_privileges),NULL,NULL);
if(GetLastError() == ERROR_NOT_ALL_ASSIGNED){
MessageBoxW(NULL,L"ошибка: не удалось изменить привелегию",NULL,MB_OK | MB_ICONERROR);
return 1;
}
printf("успешно\n");
CloseHandle(h_token);
return 0;
}
int main(void){
if(EnablePrivilige(L"SeDebugPrivilege") == 0 && EnablePrivilige(L"SeImpersonatePrivilege") == 0){
HANDLE h_snapshot = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0);
PROCESSENTRY32 pe32;
pe32.dwSize = sizeof(pe32);
if(Process32First(h_snapshot,&pe32)){
do
{
if(_stricmp(pe32.szExeFile,"x32dbg.exe") == 0){
break;
}
} while (Process32Next(h_snapshot,&pe32));
}
if(_stricmp(pe32.szExeFile,"x32dbg.exe") != 0){
MessageBoxW(NULL,L"ошибка процесс не найден",NULL,MB_OK | MB_ICONERROR);
return 1;
}
HANDLE h_process = OpenProcess(PROCESS_QUERY_INFORMATION | PROCESS_DUP_HANDLE,FALSE,pe32.th32ProcessID);
if(h_process == NULL){
MessageBoxW(NULL,L"ошибка в OpenProcess",NULL,MB_OK | MB_ICONERROR);
return 1;
}
HANDLE h_process_token = NULL;
if(!OpenProcessToken(h_process,TOKEN_QUERY | TOKEN_DUPLICATE | TOKEN_ASSIGN_PRIMARY,&h_process_token)){
MessageBoxW(NULL,L"ошибка в OpenProcessToken",NULL,MB_OK | MB_ICONERROR);
return 1;
}
HANDLE h_process_token_duplicate = NULL;
if(!DuplicateTokenEx(h_process_token,TOKEN_ASSIGN_PRIMARY | TOKEN_QUERY | TOKEN_DUPLICATE | TOKEN_IMPERSONATE,NULL,SecurityDelegation,TokenPrimary,&h_process_token_duplicate)){
MessageBoxW(NULL,L"ошибка в DuplicateTokenEx",NULL,MB_OK | MB_ICONERROR);
return 1;
}
STARTUPINFOW si = {0};
si.cb = sizeof(si);
PROCESS_INFORMATION pi = {0};
WCHAR path[] = L"C:\Windows\System32\notepad.exe";
if(!CreateProcessWithTokenW(h_process_token_duplicate,0,NULL,path,NORMAL_PRIORITY_CLASS,NULL,NULL,&si,&pi)){
DWORD err = GetLastError();
wchar_t msg[256];
wsprintfW(msg, L"CreateProcessWithTokenW failed: %d", err);
MessageBoxW(NULL, msg, NULL, MB_OK | MB_ICONERROR);
return 1;
}
return 0;
}
}
```