OpenProcess() возвращает ошибку (access denied)
От: maks1180  
Дата: 23.11.08 20:59
Оценка:
OS: Windows Vista
Работает одна сессия (user1) простого пользователя, в нем запущено 2 процесса

процесс №1 работает под аккаунтом maxim (администраторский аккаунт), т.е. был запущен с галочкой admin
процесс №2 работает под аккаунтом user1 (простого пользователя аккаунт)

Процесс №1 пытает внедриться в процесс №2, так он работает под администратором почему бы и нет...

// pid — процесс №2

::OpenProcess(PROCESS_VM_READ|PROCESS_VM_OPERATION, FALSE, pid); // Выдает ошибку 5
::OpenProcess(PROCESS_VM_READ|PROCESS_QUERY_INFORMATION, FALSE, pid); // Выдает ошибку 5
::OpenProcess(PROCESS_VM_READ, FALSE, pid); // Нормально завершается

В чем причина ошибки 5 (access denied) ???
===============================================
(реклама, удалена модератором)
Re: OpenProcess() возвращает ошибку (access denied)
От: Pavel Dvorkin Россия  
Дата: 24.11.08 02:52
Оценка:
Здравствуйте, maks1180, Вы писали:

M>OS: Windows Vista

M>Работает одна сессия (user1) простого пользователя, в нем запущено 2 процесса

M>процесс №1 работает под аккаунтом maxim (администраторский аккаунт), т.е. был запущен с галочкой admin

M>процесс №2 работает под аккаунтом user1 (простого пользователя аккаунт)

M>Процесс №1 пытает внедриться в процесс №2, так он работает под администратором почему бы и нет...


M>// pid — процесс №2


M>::OpenProcess(PROCESS_VM_READ|PROCESS_VM_OPERATION, FALSE, pid); // Выдает ошибку 5

M>::OpenProcess(PROCESS_VM_READ|PROCESS_QUERY_INFORMATION, FALSE, pid); // Выдает ошибку 5
M>::OpenProcess(PROCESS_VM_READ, FALSE, pid); // Нормально завершается

M>В чем причина ошибки 5 (access denied) ???


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.
With best regards
Pavel Dvorkin
Re[2]: OpenProcess() возвращает ошибку (access denied)
От: Аноним  
Дата: 24.11.08 11:15
Оценка:
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.

Написано НЕ ВЕРНО, так как я меня получаеться открыть хэндл, если оба процесса работают под одним аккаунтом!!!
Re[3]: OpenProcess() возвращает ошибку (access denied)
От: Аноним  
Дата: 03.12.08 02:22
Оценка:
up, ну может кто-нибудь подскажет...
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;
}
Re[4]: OpenProcess() возвращает ошибку (access denied)
От: prog_san Россия www.mhtunpack.narod.ru
Дата: 03.12.08 20:11
Оценка:
А>>Написано НЕ ВЕРНО, так как я меня получаеться открыть хэндл, если оба процесса работают под одним аккаунтом!!!

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


Да, дело в привелегиях.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.