Re[2]: OpenProcess-OpenProcessToken
От: Аноним  
Дата: 11.11.08 21:09
Оценка:
Здравствуйте, 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 падает.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.