如何获取进程内存使用WINAPI

时间:2014-04-19 14:32:39

标签: windows winapi memory

我有问题。我试图获取进程内存,但不幸的是一些进程总是在我的情况下返回相同的值 - 3276.我如何获得进程使用的实际内存量。提前谢谢。

HANDLE hProcess = OpenProcess(PROCESS_ALL_ACCESS, FALSE, entry.th32ProcessID);
            PROCESS_MEMORY_COUNTERS memCounter;
            BOOL result = GetProcessMemoryInfo(hProcess,
                                   &memCounter,
                                   sizeof( memCounter ));

            char procID[20];
            char procMem[100];
            sprintf_s(procMem, "%d",(memCounter.WorkingSetSize/1024/1024));
            if (!(strcmp(procMem,"3276"))) {

            strcpy(procMem, "<unavaliable>");

            }
            sprintf_s(procID, "%d",entry.th32ProcessID);

1 个答案:

答案 0 :(得分:2)

您没有检查错误的返回值。你必须这样做。显然其中一个是失败的。它是OpenProcess,还是GetProcessMemoryInfo?如何在没有任何错误检查的情况下判断。阅读该功能的文档,并按照给出的说明检查错误。

一旦确定哪个功能失败,您就可以尝试解决原因。如果失败,这两个函数都将设置最后一个错误值,因此您可以调用GetLastError来识别出错的地方。

很可能OpenProcess失败了,因为您要求的访问权限太多。您所需要的只是PROCESS_QUERY_INFORMATION | PROCESS_VM_READ。另一种可能的故障模式是某些系统进程不会放弃此信息。最终,您需要执行错误检查以诊断特定问题。