Здравствуйте, Аноним, Вы писали:
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;
}