Code:
int getProcesses() {
HMODULE hModule;
char szProcessName[MAX_PATH] = {0};
DWORD dwProcesses[1024], cbNeeded, cProcesses;
*dwProcesses = calloc(1024, sizeof (DWORD));
if (dwProcesses == NULL) return 0;
unsigned int i;
char PIDbuf[10];
char buf[50];
if (!EnumProcesses(dwProcesses, sizeof(dwProcesses), &cbNeeded))
return -1;
cProcesses = cbNeeded / sizeof(DWORD);
for (i = 0; i < cProcesses; i++)
if(dwProcesses[i] != 0)
{
HANDLE hProcess = OpenProcess(PROCESS_QUERY_INFORMATION |
PROCESS_VM_READ, FALSE, dwProcesses[i]);
if (NULL != hProcess)
{
strcpy(szProcessName, "System");
if (EnumProcessModules(hProcess, &hModule, sizeof(hModule),
&cbNeeded))
{
GetModuleBaseName(hProcess, hModule, szProcessName,
sizeof(szProcessName)/sizeof(CHAR));
}
sprintf(PIDbuf, "%d", dwProcesses[i]);
InsertRow(GetDlgItem(hwndMain, ID_LISTVIEW), 6, szProcessName,PIDbuf,
GetProcessMemoryWSS(hProcess, buf), GetProcessMemoryPWSS(hProcess, buf),
GetProcessPriority(hProcess), GetUserInfo(dwProcesses[i], hProcess));
}
free(dwProcesses[i-1]);
CloseHandle(hProcess);
}
return cProcesses;
}
--dwProceses Trace:
dwProcesses0,4,908,980,1004,1048,1060,1228,1308,1888,280,588,944,1448,1764...
dwProcesses0,4,908,980,1004,1048,1060,1228,1308,1888,280,588,944,1448,1764...
dwProcesses0,4,908,980,1004,1048,1060,1228,1308,1888,280,588,944,1448,1764...
--keeps printing out the same line