发生错误-启用特权后,OpenProcess()中的访问被拒绝

问题描述 投票:0回答:1

我想获取csrss进程的可执行路径。我启用了特权,但是GetLastError()函数在OpenProcess中返回错误5。我正在以管理员身份运行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
c++ security winapi elevated-privileges openprocess
1个回答
0
投票

csrss.exe是Protected Processes Light进程,此保护在Windows 8.1中引入。即使使用本地系统用户的PROCESS_VM_READ之类的低权限,您也无法再访问它,即使使用SeDebugPrivelage

而不是您在做什么,只需使用GetSystemDirectory(),然后在结果的末尾附加“ csrss.exe”即可获取文件的路径。

© www.soinside.com 2019 - 2024. All rights reserved.