Re[3]: OpenProcess() возвращает ошибку (access denied)
От: Dakis Беларусь  
Дата: 03.12.08 08:26
Оценка:
Здравствуйте, Аноним, Вы писали:

PD>>To open a handle to another another local process and obtain full access rights, you must enable the SeDebugPrivilege privilege. For more information, see Changing Privileges in a Token.


А>Написано НЕ ВЕРНО, так как я меня получаеться открыть хэндл, если оба процесса работают под одним аккаунтом!!!


А что мешает включить SeDebugPrivilege для 1-го процесса? Тогда по моему все равно под каким аккаунтом работает второй процесс.

примерно так:

#include <windows.h>
BOOL AdjustProcessPrivilege(HANDLE hProcess, LPCTSTR Privilege, BOOL bEnable) {
    HANDLE hToken;
    TOKEN_PRIVILEGES tkp;

    // получаем токен процесса

    if (!OpenProcessToken(hProcess, TOKEN_ADJUST_PRIVILEGES | TOKEN_QUERY, &hToken))
        return FALSE; 

    // получаем LUID для указаной привилегии
    LookupPrivilegeValue(NULL, Privilege, &tkp.Privileges[0].Luid); 

    tkp.PrivilegeCount = 1;  //кол-во привилегий
    tkp.Privileges[0].Attributes = bEnable ? SE_PRIVILEGE_ENABLED : 0; //значение привилегии

    // Установка указаной привилегии для процесса
    AdjustTokenPrivileges(hToken, FALSE, &tkp, 0, (PTOKEN_PRIVILEGES)NULL, 0);

    CloseHandle(hToken);

    return GetLastError() == ERROR_SUCCESS;
}

int _tmain(int argc, _TCHAR* argv[])
{
    DWORD dwPid = 3984; // <<=== сюда PID процесса нужного
    AdjustProcessPrivilege(GetCurrentProcess(), _T("SeDebugPrivilege"), TRUE);
    HANDLE hProc = OpenProcess(PROCESS_VM_READ|PROCESS_VM_OPERATION, FALSE, dwPid);
    printf ("%x, err = %d", hProc, GetLastError());
    CloseHandle(hProc);

    return 0;
}
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.