![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
как по ProcessHandle получить ProcessID [D5, D6, D7, Win2k, WinXP]
xAnjel © (2005-01-02 19:42:00)перебор всех ID и получение по них Handle не предлагать
MessageBox(0,PChar(Int2Str(OpenProcess(PROCESS_TERMINATE,False,GetCurrentProcessID))),'Generated1',0);
MessageBox(0,PChar(Int2Str(OpenProcess(PROCESS_ALL_ACCESS,False,GetCurrentPocessID))),'Generated2',0);
MessageBox(0,PChar(Int2Str(OpenProcess(PROCESS_TERMINATE,False,GetCurrentPocessID))),'Generated3',0);
MessageBox(0,PChar(Int2Str(OpenProcess(PROCESS_ALL_ACCESS,False,GetCurrentPocessID))),'Generated4',0);
все разные значения будут!!!
CloseHandle делать нельзя.
xAnjel (2005-01-07 15:51:00) [1]>> а как ты по ID определишь имя?
там перебор какраз пойдет.
kaZaNoVa (2005-01-07 11:50:00) [2]Piter © (06.01.05 23:54) [28]
банальным перебором =_))
Piter (2005-01-06 23:54:00) [3]xAnjel © (06.01.05 23:03) [27]
да, по ид опредилю имя
а как ты по ID определишь имя?
xAnjel (2005-01-06 23:03:00) [4]да, по ид опредилю имя, а там дальше все ясно, что за процесс и что с ним делать надо.
Piter (2005-01-06 16:49:00) [5]ну вот знаешь ты ID процесса. И что, тебе легче от этого становится что ли?
xAnjel (2005-01-06 16:08:00) [6]ну просто знать что за процесс, его имя или ID
Piter (2005-01-06 15:13:00) [7]Игорь Шевченко © (06.01.05 12:25) [23]
Какого процесса ?
ну я так понимаю какого угодно
xAnjel © (06.01.05 11:24) [22]
Передали Handle процесса, а чтобы моя dll с ним чтото сделала, надо сначало разобратса что за процесс
что значит разобраться? Какую информацию ты хочещь узнать и какие функции будешь применять?
Игорь Шевченко (2005-01-06 12:25:00) [8]
> Есть процесс (стороний, сделанный не автором), который загружает
> DLL и передает ей а какую-то функцию Handle процесса
Какого процесса ?
xAnjel (2005-01-06 11:24:00) [9]>> Поэтому логичный вопрос - а нафига нужен ID процесса?
Передали Handle процесса, а чтобы моя dll с ним чтото сделала, надо сначало разобратса что за процесс (имя или ID).
GuAV - спасибо за getprocessid.
GuAV (2005-01-05 19:57:00) [10]Piter © (05.01.05 19:42) [20]
Поэтому логичный вопрос - а нафига нужен ID процесса?
CreateToolhelp32Snapshot, например, чтобы перечислить thread ID.
Или может у того хендла прав не хватает :-)
Piter (2005-01-05 19:42:00) [11]kaZaNoVa © (05.01.05 17:52) [18]
потому что обе функции недокументированы
Игорь Шевченко © (05.01.05 16:14) [13]
Ерунда. Handle процесса имеет смысл только для текущего процесса, следовательно, где-то должна быть вызвана функция OpenProcess
я тоже сначала так понял. А потом я кажется понял, что имел в виду автор.
Есть процесс (стороний, сделанный не автором), который загружает DLL и передает ей а какую-то функцию Handle процесса. А вот DLL уже пишет автор. Не он определяет что будет передаваться в DLL, перед ним типа ТЗ стоит.
Лично я считаю, что лучше договориться с тем, кто пишет саму программу, чтобы в DLL передавалось именно Id процесса.
С другой стороны, что нужно сделать с процессом? Если тот же Terminate, то вполне можно обойтись и Handle'ом. Многие функции WinApi работают именно с описателем процесса. Поэтому логичный вопрос - а нафига нужен ID процесса?
GuAV (2005-01-05 17:56:00) [12]Игорь Шевченко © (05.01.05 17:44) [17]
Против всех ? ;-)
kaZaNoVa (2005-01-05 17:52:00) [13]Игорь Шевченко © (05.01.05 17:44) [17]
почему?
Игорь Шевченко (2005-01-05 17:44:00) [14]kaZaNoVa © (05.01.05 17:13) [16]
Оба варианта плохи.
kaZaNoVa (2005-01-05 17:13:00) [15]Игорь Шевченко © (05.01.05 17:04) [15]
а что лучше, Nt... или Zw.. ?
Игорь Шевченко (2005-01-05 17:04:00) [16]GuAV © (05.01.05 16:21) [14]
Да, разумное дополнение, спасибо.
Тогда Nt(Zw)QueryInformationProcess для Nt-систем.
С уважением,
GuAV (2005-01-05 16:21:00) [17]
> следовательно, где-то должна быть вызвана функция
> OpenProcess, значит, там и его ID известен.
Не обязательно. OpenProcess - один из способов получить хэндл процесса. Он мог быть получен для данного процесса вызовом DuplicateHandle из другого процесса.
Игорь Шевченко (2005-01-05 16:14:00) [18]
> > в ф-цыю передаетса хендл процесса (любого)
Ерунда. Handle процесса имеет смысл только для текущего процесса, следовательно, где-то должна быть вызвана функция OpenProcess, значит, там и его ID известен. Если DLL подгружена к процессу, то GetCurrentProcessId
GuAV (2005-01-04 16:21:00) [19]GrayFace © (04.01.05 16:09) [11]
Будет. но
> в ф-цыю передаетса хендл процесса (любого)
ps: похоже, нужна ф-ция NtQueryInformationProcess
GrayFace (2005-01-04 16:09:00) [20]А, разве, процесс, подгрузивший DLL, не будет для нее CurrentProcess-ом?