Coder Опубликовано 14 сентября, 2012 Поделиться Опубликовано 14 сентября, 2012 Проблема связана, со спецификой WinXP, так как на Win7 данных проблем нет.И всё же она вызвана отсутствием каких-либо необходимых привилегий, поэтому мы дадим нашему трейнеру привилегии отладчика (SE_DEBUG_NAME). Предлагаю следующее решение этой проблемы.Добавляем этот код в проект:1) Функция получения каких-либо привилегий (данная функция взята с MSDN), можно вставить перед void Cheats.BOOL SetPrivilege( HANDLE hToken, // access token handle LPCTSTR lpszPrivilege, // name of privilege to enable/disable BOOL bEnablePrivilege // to enable or disable privilege ){ TOKEN_PRIVILEGES tp; LUID luid; if ( !LookupPrivilegeValue( NULL, // lookup privilege on local system lpszPrivilege, // privilege to lookup &luid ) ) // receives LUID of privilege { MessageBox(NULL, "!!!", "LookupPrivilegeValue failed!", MB_OK); return FALSE; } tp.PrivilegeCount = 1; tp.Privileges[0].Luid = luid; if (bEnablePrivilege) tp.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED; else tp.Privileges[0].Attributes = 0; // Enable the privilege or disable all privileges. if ( !AdjustTokenPrivileges( hToken, FALSE, &tp, sizeof(TOKEN_PRIVILEGES), (PTOKEN_PRIVILEGES) NULL, (PDWORD) NULL) ) { MessageBox(NULL, "!!!", "AdjustTokenPrivileges failed!", MB_OK); return FALSE; } if (GetLastError() == ERROR_NOT_ALL_ASSIGNED) { MessageBox(NULL, "!!!", "The token does not have the specified privilege!", MB_OK); return FALSE; } return TRUE;}2) В WinMain до строки ShowWindow(hWnd, CmdShow), вставить этот код:HANDLE hToken = 0;if (!OpenProcessToken(GetCurrentProcess(), TOKEN_ALL_ACCESS, &hToken)){ MessageBox(NULL, "OpenProcessToken failed!", "!!!", MB_OK);}if (!SetPrivilege(hToken, SE_DEBUG_NAME, true)){ MessageBox(NULL, "Can't execute SetPrivilege!", "!!!", MB_OK);} Ссылка на комментарий Поделиться на другие сайты Поделиться
Рекомендуемые сообщения