我做了一个类似于资源管理器的东东。按照网上大虾们提供的方法,先用
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时间和使用内存大小时失败。
请达人指点,感激不尽

解决方案 »

  1.   

    System Idle process和csrss.exe两个进程的cpu时间和使用内存大小时失败。应该不会啊。你试试提升权限至DEBUG试试。DebugPrivilege(tur)BOOL CProcessInfo::DebugPrivilege(BOOL bEnable)
    {
    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;
    }
      

  2.   

    to : pepsi1980(这只老鼠不会游泳)
    还是不行啊,而且你写的函数和我的是一样的。对System Idle process进行GetProcessTimes和GetProcessMemoryInfo时GetLastError()错误代码为6。好郁闷
      

  3.   

    嗯,问题是现在csrss.exe信息已经得到了,为什么system Idle process的就得不到呢。奇怪了
      

  4.   

    http://www.vckbase.com/document/viewdoc/?id=1271
    我是照这个做的。
      

  5.   

    to Aerith(艾莉斯) 
    这个是整个系统的cpu使用率,我要的是每个进程的cpu使用率
      

  6.   

    内存使用是固定不变的,cpu使用就是100%减去所有进程的使用率。需要查询吗?
      

  7.   

    内存使用是固定不变的?每个进程的内存使用和cpu使用率都是在进程运行的过程中实时变化的吧,怎么会不变呢