Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: WinAPI и системное программирование > библиотека Toolhelp32


Автор: Golar 8.5.2006, 15:52
Приветствую Вас! Подскажите мне пожалуйста, я пишу простенькую прогу, использующую  библиотеку Toolhelp32, тут все понятно, но что может значить термин 'длина процесса'? Может я что-нибудь пропустила, короче с этим проблема.  

Автор: Rennigth 9.5.2006, 11:18
а ты откуда это цитируешь? полный контекст в студию. smile 

Автор: Golar 9.5.2006, 12:54
Да не откуда, просто задача передо мной такая  smile  : выявить процессы, у которых родители максимальной длинны, вот и ломаю голову что это и как! smile   но пока у меня одна версия, длина  -  это кол-во потоков, хотя это и мало вероятно(с таким условием я знаю как справиться, это не сложно, но верна ли сама постановка задачи   smile ). Если есть др. соображения - буду рада, спасибо!  

Автор: Yanis 9.5.2006, 16:17
Если рассматривать слово "процесс" в его оригинальном значении, то возможно под словосочетанием "длина процесса" понимается время на протяжении которого этот процесс проходит. 

Автор: Nickel 9.5.2006, 16:50
Может быть имеется ввиду количество символов в названии?  smile  

Автор: Rouse_ 9.5.2006, 16:54
У процесса всегда есть родитель, также сам процесс может породить дочерний и дочерний будет запущем в контексте безопасности текущего процесса. Тебе по всей видимости нужно вычислить процессы с максимальным числом предков. 

Автор: Golar 9.5.2006, 17:16
Спасибо, Rouse! Твоя версия наиболее похожа на правду! а я что-то зациклилась на своем и ничего нового в голову не идет. Благодарю, подкинул свежую идею ! smile  

Автор: Yanis 9.5.2006, 20:01
Golar (ну или кто-нибудь другой smile)
Цитата(Golar @  9.5.2006,  12:54 Найти цитируемый пост)
родители максимальной длинны

Растолкуйте пожалуйста подробно мне эту фразу. Для меня она никак не похожа по смыслу на 

Цитата(Rouse_ @  9.5.2006,  16:54 Найти цитируемый пост)
максимальным числом предков
 

Автор: Rouse_ 10.5.2006, 08:58
Цитата(Yanis @  9.5.2006,  21:01 Найти цитируемый пост)
Растолкуйте пожалуйста подробно мне эту фразу.

Скачай вот это и посмотри, там строиться дерево процесов в порядке наследования...
http://www.sysinternals.com/Utilities/ProcessExplorer.html 

Автор: Yanis 10.5.2006, 09:37
Цитата(Rouse_ @  10.5.2006,  09:58 Найти цитируемый пост)
Скачай вот это и посмотри, там строиться дерево процесов в порядке наследования...

Спасибо. Я часто пользуюсь этой программой (и вообще уважаю его создателей), но мне непонятна именно такая трактовка задачи. Вообще Golar должна объяснить, такая задача... 

Автор: Rouse_ 10.5.2006, 11:37
Ну почему же? Трактовка как раз хорошая, и задача достаточно грамотная, т.к. подразумевает наличие достаточно хороших знаний в плане программирования и начальных понятий о принципе работы системы. 

Автор: Yanis 10.5.2006, 12:06
Ну на счёт грамотности трактовки я не соглашусь. А то что решение задачи требует неплохих знаний, в этом я с тобой полностью согласен. 

Автор: Golar 10.5.2006, 17:21
Приветствую! Я смотрю, заинтриговала вас эта задача! smile Ну что ж, насчет трактовки, так это не ко мне претензии smile (хотя в этом я на вашей стороне) а с самой задачей я разобралась. Просто надо было повнимательней изучить использование библиотеки ToolHelp32, а именно обработку полученной информации. Теперь (зная что от меня требуют) я бы переформулировала задучу иначе : выявить процессы, у которых родители явл. владельцами модуля размер которого наибольший. т.е под длиной процесса- родителя на самом деле подразумевался размер модуля, владельцем которого и является процесс - родитель! Вот теперь и судите о правильности формулировки. А решить данную проблему не так уж сложно , нужно:
1.Получить мгновенный снимок (snapshot) системы, содержащий в себе всю необходимую информацию 
при помощи функции CreateToolhelp32Snapshot 
2. извлечь нужную инф-цию о процессах
3. использовать то, что получено во 2-ом, и извлечь инф. о модулях
и все, а дальше все на мази!  smile  
  

Автор: Yanis 10.5.2006, 18:47
Цитата(Golar @  10.5.2006,  18:21 Найти цитируемый пост)
т.е под длиной процесса- родителя на самом деле подразумевался размер модуля

Буду знать.

P. S. кокое небрежно обращение с терминами... 

Автор: Golar 10.5.2006, 19:21
было бы бережное обращение с терминами - вряд ли бы возникли вопросы smile . Спасибо smile   

Автор: Rouse_ 10.5.2006, 20:00
Расстрелять постановщика задачи из рогатки smile Что есть размер модуля? Размер исполняемого файла? Тогда постановка задачи является неверной ибо данный размер может коррелироваться в процессе исполнения, к примеру тот-же полиморф (с применением банальной обфускацией кода)... 

Автор: Golar 10.5.2006, 21:25
Дело в том, что при обработке инф о модулях мы будем иметь запись типа TModuleEntry32, а это:
Код

TModuleEntry32 = record
    dwSize: DWORD;
    th32ModuleID: DWORD;  //ID данного модуля.
    th32ProcessID: DWORD; //ID процесса - владельца модуля.
    GlblcntUsage: DWORD;  //глобальный счетчик ссылок на модуль
    ProccntUsage: DWORD;  //счетчик числа пользователей в контексте процесса-владельца
    modBaseAddr: PBYTE;   //базовый адрес модуля в контексте процесса-владельца
    modBaseSize: DWORD;   //размер модуля в байтах, начиная с modBaseAddr, ВОТ ПРО ЭТО РЕЧЬ идет!!!
    hModule: HMODULE;     // описатель модуля в контексте процесса-владельца.
                                   //Это значение действительно только в контексте идентификатора процесса th32ProcessID.
    szModule: array[0..MAX_MODULE_NAME32] of Char;//имя модуля, строка завершающаяся нуль-символом.
    szExePath: array[0..MAX_PATH - 1] of Char;//имя файла модуля
  end;

Вот, если я тебя правильно поняла, то эти выкладки тебе дадут ответ  smile   

Автор: Rouse_ 10.5.2006, 22:48
Ах вот обо что вы уперлись smile Ну чтож... тоже юмор. Всеж отличается от задач двухлетней давности, когда студенты говорили, что им для курсовой нужно ось писать smile 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)