Здравствуйте, DarkTranquillity, Вы писали:
DT>Как где? Прямо перед вызовом OpenProcess. Про это есть ссылка прямо в разделе MSDN про OpenProcess — To open a handle to another another process and obtain full access rights, you must enable the SeDebugPrivilege privilege. For more information, see Changing Privileges in a Token.
DT>Желательно бы потом вернуть обратно привилегии, чтобы случайно чего-то не напартачить, если конечно не вредителя пишем.
кусок кода:
DWORD explorer_ID; // PID explorer.exe
HANDLE hProcess,hToken;
hProcess=OpenProcess(PROCESS_ALL_ACCESS,FALSE,GetCurrentProcessId());// или GetCurrentProcess()
if(!hProcess)
// завершение работы
if(!SetPrivilege(hProcess,_T("SeDebugPrivilege"),TRUE)// функция из msdn как пример AdjustTokenPrivilege
// завершение работы
CloseHandle(hProcess);
hProcess=OpenProcess(PROCESS_ALL_ACCESS,FALSE,explorer_ID);
if(!hProcess)
// ...
if(!OpenProcessHandle(hProcess,TOKEN_QUERY,&hToken))
// ...
CloseHandle(hProcess)
// убираю SeDebugPrivilege от текущего процесса
...
проблема в том, что первый вызов OpenProcess возвращает ERROR_ACCESS_DENIED. Пробывал выставлять TOKEN_ADJUST_PRIVILEGES|TOKEN_QUERY не помогает, хотя при запуске из под обычного пользователя все нормально, а из под system падает.