我想获得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
答案 0 :(得分:0)
csrss.exe是一个Protected Processes Light进程,此保护是Windows 8.1中引入的。即使以本地系统用户的身份(例如PROCESS_VM_READ)具有较低权限,也无法再访问它,即使使用SeDebugPrivelage
不用执行任何操作,只需使用GetSystemDirectory(),然后在结果的末尾附加“ csrss.exe”即可获取文件的路径。