Страница: 1 |
Страница: 1 |
Вопрос: Кто процесс запустил?
Добавлено: 15.10.04 07:02
Автор вопроса: Mihalыch | ICQ: 373-509-101
Если в процедуру приведенную ниже передать идентификатор процесса, то она заполнит массив «ModuleID» ссылками на относящимися к нему модули (это я так думаю…). Первый элемент массива это обычно путь к исполняемому файлу…, а что значат остальные элементы массива. Иногда просматривая их обнаруживаю пути к библиотекам, которые на мой взгляд даже близко не имеют отношения к выбранному процессу.
Посмотрите на досуге.
Private Sub GetModule(ProcID As Long)
Dim i As Long
Dim hProcess As Long
Dim cb As Long
Dim cbNeeded As Long
Dim ModuleID() As Long
Dim nModules As Long
Dim ModuleName As String
hProcess = OpenProcess(PROCESS_QUERY_INFORMATION Or PROCESS_VM_READ, 0, ProcID)
If hProcess <> 0 Then
cb = 8
cbNeeded = 96
Do While cb <= cbNeeded
cb = cb * 2
ReDim ModuleID(cb / 4)
Call EnumProcessModules(hProcess, ModuleID(1), cb, cbNeeded)
Loop
nModules = cbNeeded / 4
If nModules > 0 Then
ModuleName = String(MAX_PATH, 0)
For i = 0 To UBound(ModuleID)
Call GetModuleFileNameEx(hProcess, ModuleID(i), ModuleName, MAX_PATH)
List1.AddItem Trim(ModuleName)
If i = 0 Then Label1.Caption = Trim(ModuleName)
Next i
End If
End If
Call CloseHandle(hProcess)
End Sub
Ответы
Всего ответов: 5
Номер ответа: 1
Автор ответа:
sne
Разработчик Offline Client
ICQ: 233286456
Вопросов: 34
Ответов: 5445
Web-сайт:
Профиль | | #1
Добавлено: 15.10.04 10:32
Библиотеки используемые процессом использовать могут функции находящиеся в др. библиотеках, т.о. они и их проецируют в адр. пр-во те тоже ведь могут запросить какую-нить функцию из др. библиотеки и т.д.
Так это все дело все и накапливается...
Номер ответа: 2
Автор ответа:
Mihalыch
ICQ: 373-509-101
Вопросов: 56
Ответов: 330
Профиль | | #2
Добавлено: 15.10.04 10:45
А вот еще вопрос, есть у меня программка, которая в ListView заносит имена исполняемых файлов всех найденных процессов, потом при щелчке по элементу списка, в ListBox заносится все из массива «ModuleID». Так вот собственно вопрос, допустим щелкаю по SVCHOST.EXE, их обычно несколько, почему для одного «SVCHOST’а» эта процедура находит много всего, а для другого не чего?
Номер ответа: 3
Автор ответа:
sne
Разработчик Offline Client
ICQ: 233286456
Вопросов: 34
Ответов: 5445
Web-сайт:
Профиль | | #3
Добавлено: 15.10.04 11:08
SVCHOST.EXE, это служба запускаемая с разными параметрами и она выполняет различные действия, существует способ загрузки DLL не компилятором, а динамически с пом. LoadLibrary... А так же нахождение адреса функции с пом. GetProcAddress, опосля чего эту функцию можно запустить... т.о. в зависимости от того с каким ключем SVCHOST был запущен, я думаю, он для своих целей загружает различные функции и различное их кол-во...
Номер ответа: 4
Автор ответа:
Mihalыch
ICQ: 373-509-101
Вопросов: 56
Ответов: 330
Профиль | | #4
Добавлено: 15.10.04 11:21
Спасибо sne, не могу сказать, что все понял в последнем ответе, попробую поискать ответ в умных книжках. Вообще заморочился с этой темой потому, что нужно было узнать, где прячется файл «запустивший» окно, а тут на тебе куча всего…
Номер ответа: 5
Автор ответа:
sne
Разработчик Offline Client
ICQ: 233286456
Вопросов: 34
Ответов: 5445
Web-сайт:
Профиль | | #5
Добавлено: 15.10.04 15:11
я и сам не понял, т.ч. ниче страшного Тем более что ответ скорее всего неверен, это же всего-лишь предположение...