我有问题。我试图获取进程内存,但不幸的是一些进程总是在我的情况下返回相同的值 - 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);
答案 0 :(得分:2)
您没有检查错误的返回值。你必须这样做。显然其中一个是失败的。它是OpenProcess
,还是GetProcessMemoryInfo
?如何在没有任何错误检查的情况下判断。阅读该功能的文档,并按照给出的说明检查错误。
一旦确定哪个功能失败,您就可以尝试解决原因。如果失败,这两个函数都将设置最后一个错误值,因此您可以调用GetLastError
来识别出错的地方。
很可能OpenProcess
失败了,因为您要求的访问权限太多。您所需要的只是PROCESS_QUERY_INFORMATION | PROCESS_VM_READ
。另一种可能的故障模式是某些系统进程不会放弃此信息。最终,您需要执行错误检查以诊断特定问题。