С++: Функція для підрахунку процесів

Дана стаття розповідає про роботу з процесами, модулями, компонентами і потоками за допомогою біліотеки TOOLHELP. Робота з процесами - основа, без якої займатися системним програмуванням так само безглуздо, як без знання структури PE-файлів або організації пам'яті. Тому я піднімаю цю тему знов і розповім про роботу з процесами за допомогою функцій TOOLHELP. Мова програмування: я вибрав C з багатьох причин і в першу чергу із-за його нізкоуровнего взаємодії з пам'яттю. Перерахувати запущені в системі процеси можна по-різному, я звик користуватися функціями TOOLHELP. Загальна послідовність дій при роботі з цією бібліотекою: робимо знімок (Snapshot) системної інформації, яка нам необхідна, потім бігаємо по процесах, а також модулям.
Тому почнемо з простого - перерахуємо всі процеси. //Перерахування процесів int EnumerateProcs(void){ //створюємо "знімок" інформації про процеси //перший параметр функції - константа, що визначає //яку інформацію нам потрібно "зняти", а другою - //ідентифікатор процесу, до якого відноситься ця //інформація. В даному випадку це 0 оскільки ми робимо //знімок всіх процесів HANDLE pSnap = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0); bool bIsok = false; //Структура, в яку будуть записані дані процесу PROCESSENTRY32 ProcEntry; //встановимо її розмір, це необхідна дія ProcEntry.dwSize = sizeof(ProcEntry); //тепер визначимо перший процес //перший параметр функції - хендл "знімка" інформації //другою - адреса структури PROCESSENTRY32 //true - у разі успіху, false - у разі невдачі bIsok = Process32First(pSnap &ProcEntry); //тут можна було вставити розкішний цикл for(....)
Але це //не зовсім легко для читання //отже цикл while while(bIsok) //друкуємо ім'я процесу, його ідентифікатор //тепер, коли у нас є структура ProcEntry //То, яку інформацію ви з неї візьмете, залежить //тільки від завдання )) printf("%s %un", ProcEntry.szExeFile, ProcEntry.th32ProcessID); bIsok = Process32Next(pSnap &ProcEntry); //чистимо пам'ять! CloseHandle(pSnap); return 1;} У адресному просторі кожного процесу (в області пам'яті, виділеною йому системою) знаходяться різні бібліотеки, які, власне, складають додаток.