Статья: Работа с процессами в С/С++. Основные приемы
//Хоть она никому нафиг не нужна :о)
printf("%u %un", ThrdEntry.th32OwnerProcessID, ThrdEntry.th32ThreadID);
}
bIsok = Thread32Next(pThreadSnap, &ThrdEntry);
}
//незабываемчиститьпамять
CloseHandle(pThreadSnap);
return 1;
}
Ну вот, у нас есть потоки. Что еще осталось? Правильно, остались кучи. Здесь тоже все очень просто:
int EnumerateHeaps(DWORD PID)
{
//Первый параметр - идентификатор процесса
//а второй - основная куча
//Теперь делаем снимок, чтоб перечислить кучки...
HANDLE pSnapHeaps = CreateToolhelp32Snapshot(TH32CS_SNAPHEAPLIST, PID);
bool bIsok = false;
bool bIsokHeap = false;
//Структура, в которую будут записываться данные списка кучи
HEAPLIST32 HpLst;
//Структура, в которую будут записываться данные
//непосредствнно БЛОКОВ КУЧИ
HEAPENTRY32 HpEntry;
//Ставим размеры...
HpLst.dwSize = sizeof(HEAPLIST32);
HpEntry.dwSize = sizeof(HEAPENTRY32);
bIsok = Heap32ListFirst(pSnapHeaps, &HpLst);
while (bIsok)
{