Получение ошибки - доступ запрещен в OpenProcess() после включения привилегий

Я хочу получить исполняемый путь процесса csrss. Я включил привилегии, но функция GetLastError() возвращает ошибку 5 в OpenProcess. Я использую Visual Studio как администратор и компилирую программу в 64-битном режиме, также я использую Windows 8. Спасибо всем.

HANDLE hcurrentProcess=GetCurrentProcess();
HANDLE hToken;
size_t error;

if (!OpenProcessToken(hcurrentProcess, TOKEN_ADJUST_PRIVILEGES | TOKEN_QUERY, &hToken))
return nullptr; 

if (CheckTokenPrivilege(hcurrentProcess, SE_DEBUG_NAME)) {  
LUID luid;

if (!LookupPrivilegeValue(NULL, SE_DEBUG_NAME, &luid))
    return nullptr;

TOKEN_PRIVILEGES newState,prvsState;
DWORD length;
newState.PrivilegeCount = 1;
newState.Privileges[0].Luid = luid;
newState.Privileges[0].Attributes = 2;

AdjustTokenPrivileges(hToken, FALSE, &newState, 28, &prvsState, &length);
error = GetLastError(); //error = 0

if (error == ERROR_NOT_ALL_ASSIGNED)
   return nullptr;
    //OpenProcess(PROCESS_QUERY_INFORMATION | PROCESS_VM_READ, FALSE, 876);  also error 5
HANDLE  hProcess = OpenProcess(PROCESS_ALL_ACCESS, FALSE, 876); 

    error = GetLastError(); }   //  error 5  Access is denied

0 ответов

Csrss .exe - это процесс Protected Processes Light, эта защита появилась в Windows 8.1. Вы больше не можете получить к нему доступ даже с низким разрешением, например PROCESS_VM_READ, в качестве локального пользователя системы, даже с SeDebugPrivelage

Вместо того, что вы делаете, просто используйте GetSystemDirectory(), а затем добавьте "csrss.exe" в конце результата, чтобы получить путь к файлу.

Другие вопросы по тегам