Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2005.02.20;
Скачать: CL | DM;

Вниз

как по ProcessHandle получить ProcessID   Найти похожие ветки 

 
xAnjel ©   (2005-01-02 19:42) [0]

перебор всех 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 делать нельзя.


 
Eraszer   (2005-01-02 20:09) [1]

GetCurrentProcessId


 
xAnjel ©   (2005-01-03 12:18) [2]

мне не свого процесса надо, у меня длл подгружаемая другим процессом, в ф-цыю передаетса хендл процесса (любого), а мне нужно узнать что за процесс, по его хендлу!


 
Piter ©   (2005-01-03 13:51) [3]

xAnjel ©   (03.01.05 12:18) [2]
в ф-цыю передаетса хендл процесса


handle процесса будет для всех процессов разный. И в одном процессе он будет разный, как ты сам заметил. Поэтому передавать надор ID процесса - величину постоянную.

И между прочим, на каждый OpenProcess надо сделать CloseHandle


 
xAnjel ©   (2005-01-03 14:04) [4]

процесс не мой, моя только длл, и не я решал, что передавать, так что передают хендл, который закрывань не желательно.
Так все же как по Handle получить ID процесса?


 
Piter ©   (2005-01-03 14:31) [5]

Никак.

А зачем тебе нужно знать ID процесса?


 
xAnjel ©   (2005-01-03 14:57) [6]

>> Никак.
Можно! видел dcu которые это делали, но нужен сурс

>> А зачем тебе нужно знать ID процесса?
чтобы знать что за процесс, и работать с ним соответственно.


 
Piter ©   (2005-01-03 15:26) [7]

Каким образом ты хочешь с ним работать?


 
kaZaNoVa ©   (2005-01-03 15:41) [8]

xAnjel ©   (03.01.05 14:57) [6]

> Можно! видел dcu которые это делали, но нужен сурс

ну, так ..   ИДА в зубы и вперёд:))


 
Erik1 ©   (2005-01-04 11:25) [9]

Сразу приходит в голову получить список всех процесов и перебрать их Handle. Когда оказывается одинаковый с заданым, вытаскиваем его ID.


 
GuAV ©   (2005-01-04 14:54) [10]

http://msdn.microsoft.com/library/en-us/dllproc/base/getprocessid.asp
, но Requires Windows XP SP1.

Для более старых ОС - некокументированная функция из ntdll.dll
Пример - на сайте Игоря Шевченко в QuerySystemInformation_60


 
GrayFace ©   (2005-01-04 16:09) [11]

А, разве, процесс, подгрузивший DLL, не будет для нее CurrentProcess-ом?


 
GuAV ©   (2005-01-04 16:21) [12]

GrayFace ©   (04.01.05 16:09) [11]

Будет. но

>  в ф-цыю передаетса хендл процесса (любого)


ps: похоже, нужна ф-ция NtQueryInformationProcess


 
Игорь Шевченко ©   (2005-01-05 16:14) [13]


> >  в ф-цыю передаетса хендл процесса (любого)


Ерунда. Handle процесса имеет смысл только для текущего процесса, следовательно, где-то должна быть вызвана функция OpenProcess, значит, там и его ID известен. Если DLL подгружена к процессу, то GetCurrentProcessId


 
GuAV ©   (2005-01-05 16:21) [14]


> следовательно, где-то должна быть вызвана функция
> OpenProcess, значит, там и его ID известен.

Не обязательно. OpenProcess - один из способов получить хэндл процесса. Он мог быть получен для данного процесса вызовом DuplicateHandle из другого процесса.


 
Игорь Шевченко ©   (2005-01-05 17:04) [15]

GuAV ©   (05.01.05 16:21) [14]

Да, разумное дополнение, спасибо.
Тогда Nt(Zw)QueryInformationProcess для Nt-систем.

С уважением,


 
kaZaNoVa ©   (2005-01-05 17:13) [16]

Игорь Шевченко ©   (05.01.05 17:04) [15]
а что лучше,  Nt... или Zw..  ?


 
Игорь Шевченко ©   (2005-01-05 17:44) [17]

kaZaNoVa ©   (05.01.05 17:13) [16]

Оба варианта плохи.


 
kaZaNoVa ©   (2005-01-05 17:52) [18]

Игорь Шевченко ©   (05.01.05 17:44) [17]
почему?


 
GuAV ©   (2005-01-05 17:56) [19]

Игорь Шевченко ©   (05.01.05 17:44) [17]

Против всех ? ;-)


 
Piter ©   (2005-01-05 19:42) [20]

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 19:57) [21]

Piter ©   (05.01.05 19:42) [20]
Поэтому логичный вопрос - а нафига нужен ID процесса?

CreateToolhelp32Snapshot, например, чтобы перечислить thread ID.
Или может у того хендла прав не хватает :-)


 
xAnjel ©   (2005-01-06 11:24) [22]

>> Поэтому логичный вопрос - а нафига нужен ID процесса?
Передали Handle процесса, а чтобы моя dll с ним чтото сделала, надо сначало разобратса что за процесс (имя или ID).

GuAV - спасибо за getprocessid.


 
Игорь Шевченко ©   (2005-01-06 12:25) [23]


> Есть процесс (стороний, сделанный не автором), который загружает
> DLL и передает ей а какую-то функцию Handle процесса


Какого процесса ?


 
Piter ©   (2005-01-06 15:13) [24]

Игорь Шевченко ©   (06.01.05 12:25) [23]
Какого процесса ?


ну я так понимаю какого угодно

xAnjel ©   (06.01.05 11:24) [22]
Передали Handle процесса, а чтобы моя dll с ним чтото сделала, надо сначало разобратса что за процесс


что значит разобраться? Какую информацию ты хочещь узнать и какие функции будешь применять?


 
xAnjel ©   (2005-01-06 16:08) [25]

ну просто знать что за процесс, его имя или ID


 
Piter ©   (2005-01-06 16:49) [26]

ну вот знаешь ты ID процесса. И что, тебе легче от этого становится что ли?


 
xAnjel ©   (2005-01-06 23:03) [27]

да, по ид опредилю имя, а там дальше все ясно, что за процесс и что с ним делать надо.


 
Piter ©   (2005-01-06 23:54) [28]

xAnjel ©   (06.01.05 23:03) [27]
да, по ид опредилю имя


а как ты по ID определишь имя?


 
kaZaNoVa ©   (2005-01-07 11:50) [29]

Piter ©   (06.01.05 23:54) [28]
банальным перебором =_))


 
xAnjel ©   (2005-01-07 15:51) [30]

>> а как ты по ID определишь имя?
там перебор какраз пойдет.



Страницы: 1 вся ветка

Текущий архив: 2005.02.20;
Скачать: CL | DM;

Наверх




Память: 0.54 MB
Время: 0.047 c
6-1102582950
Майкл
2004-12-09 12:02
2005.02.20
Помогите, пожалуйста, с программой.


1-1107433666
mikeee
2005-02-03 15:27
2005.02.20
можноли работать с текстовым файлом как с Tstrings?


1-1107761082
dreamse
2005-02-07 10:24
2005.02.20
Проблема с копированием директорий


14-1106881694
Думкин
2005-01-28 06:08
2005.02.20
С Днем Рождения! 28 января


1-1107452804
Aleks
2005-02-03 20:46
2005.02.20
передать его данные в Edit200.text с Form1.ActiveControl.Name;