我做了一个类似于资源管理器的东东。按照网上大虾们提供的方法,先用
OpenProcessToken(GetCurrentProcess(), TOKEN_ADJUST_PRIVILEGES, &hToken);
AdjustTokenPrivileges(hToken, FALSE, &tp, 0, (PTOKEN_PRIVILEGES)NULL, 0);
来提升对进程的控制权限,然后
hSnapShot = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0);
Process32First(hSnapShot,&processInfo);
Process32Next(hSnapShot,&processInfo);
对进程进行遍历
hProcess = OpenProcess(PROCESS_QUERY_INFORMATION,FALSE,processInfo.th32ProcessID);但是在
GetProcessTimes(hProcess,&CreateTime,&ExitTime,&KernelTime,&UserTime));
和GetProcessMemoryInfo(hProcess,&PMCounter,sizeof(PMCounter));
的时候总是读System Idle process和csrss.exe两个进程的cpu时间和使用内存大小时失败。
请达人指点,感激不尽
OpenProcessToken(GetCurrentProcess(), TOKEN_ADJUST_PRIVILEGES, &hToken);
AdjustTokenPrivileges(hToken, FALSE, &tp, 0, (PTOKEN_PRIVILEGES)NULL, 0);
来提升对进程的控制权限,然后
hSnapShot = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0);
Process32First(hSnapShot,&processInfo);
Process32Next(hSnapShot,&processInfo);
对进程进行遍历
hProcess = OpenProcess(PROCESS_QUERY_INFORMATION,FALSE,processInfo.th32ProcessID);但是在
GetProcessTimes(hProcess,&CreateTime,&ExitTime,&KernelTime,&UserTime));
和GetProcessMemoryInfo(hProcess,&PMCounter,sizeof(PMCounter));
的时候总是读System Idle process和csrss.exe两个进程的cpu时间和使用内存大小时失败。
请达人指点,感激不尽
{
BOOL bResult = TRUE;
HANDLE hToken;
TOKEN_PRIVILEGES TokenPrivileges; if(OpenProcessToken(GetCurrentProcess(),TOKEN_QUERY | TOKEN_ADJUST_PRIVILEGES,&hToken) == 0)
{
printf("OpenProcessToken Error: %d\n",GetLastError());
bResult = FALSE;
}
TokenPrivileges.PrivilegeCount = 1;
TokenPrivileges.Privileges[0].Attributes = bEnable ? SE_PRIVILEGE_ENABLED : 0;
LookupPrivilegeValue(NULL,SE_DEBUG_NAME,&TokenPrivileges.Privileges[0].Luid);
AdjustTokenPrivileges(hToken,FALSE,&TokenPrivileges,sizeof(TOKEN_PRIVILEGES),NULL,NULL);
if(GetLastError() != ERROR_SUCCESS)
{
bResult = FALSE;
}
CloseHandle(hToken);
return bResult;
}
还是不行啊,而且你写的函数和我的是一样的。对System Idle process进行GetProcessTimes和GetProcessMemoryInfo时GetLastError()错误代码为6。好郁闷
我是照这个做的。
这个是整个系统的cpu使用率,我要的是每个进程的cpu使用率