Работа с процессами в С/С++. Основные приемы
Категория реферата: Рефераты по информатике, программированию
Теги реферата: отчет о прохождении практики, моря реферат
Добавил(а) на сайт: Фабиан.
Предыдущая страница реферата | 1 2 3 4 5 6 7 8 9 | Следующая страница реферата
char szExePath[MAX_PATH]; //Полный путь к модулю
} MODULEENTRY32,*PMODULEENTRY32,*LPMODULEENTRY32;
Обратите внмание: ссылка на модуль (параметр hModule) - это первый байт ДОС-заголовка! Таким образом, мы получаем возможность работать с проекцией при некотором знании структуры PE-файлов. В частности мы можем прочиатать таблицу импорта, и, как правило, - даже переписать ее (это используется при перехвате АПИ). Параметр szExePath имеет свой "заскок" - иногда полный путь к модулю возвращается со странными вставками и, например, всесто "c:windowssystem32advapi32.dll" я иногда получаю "c:x86_proc_winsyspathadvapi32.dll". Как правило для системных задач средней сложности (перехват апи, или, наоборот, перехват стелсов) всего вышеописанного хватает. Но на этом возможности toolhelp не исчерпываются и теперь мы побегаем по потокам! Работа с потоками несколько отличается от работы с модулями - даже если мы сделаем снимок, задав идентификатор какого-либо процесса, функция Thread32Next не остановится, пока не пробежится по ВСЕМ потокам в системе. Поэтому мы должны проверять, к какому процессу принадлежит поток - благо, в структуре THREADENTRY32 есть член th32OwnerProcessID - идентификатор породившего поток процесса. Таким образом:
int EnumerateThreads(DWORD PID)
{
//Начнем с создания снимка
HANDLE pThreadSnap = CreateToolhelp32Snapshot(TH32CS_SNAPTHREAD, PID);
bool bIsok = false;
//Структура, описывающая поток
THREADENTRY32 ThrdEntry;
//ставим размер
ThrdEntry.dwSize = sizeof(THREADENTRY32);
//Берем первый поток
bIsok = Thread32First(pThreadSnap, &ThrdEntry);
//и бегаем по всем потокам...
while (bIsok)
{
//проверяем, тому ли процессу принадлежит поток
if (ThrdEntry.th32OwnerProcessID == PID)
{
//Если да, то выводим некотурую информацию...
//Хоть она никому нафиг не нужна :о)
printf("%u %un", ThrdEntry.th32OwnerProcessID, ThrdEntry.th32ThreadID);
}
bIsok = Thread32Next(pThreadSnap, &ThrdEntry);
Рекомендуем скачать другие рефераты по теме: государственный диплом, защита курсовой работы.
Предыдущая страница реферата | 1 2 3 4 5 6 7 8 9 | Следующая страница реферата