Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "WinAPI";
Текущий архив: 2005.02.20;
Скачать: [xml.tar.bz2];

Вниз

как по 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 вся ветка

Форум: "WinAPI";
Текущий архив: 2005.02.20;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.52 MB
Время: 0.036 c
3-1106419687
stud1
2005-01-22 21:48
2005.02.20
Компоненты ввода даты в базу данных


3-1106213481
SERGGG
2005-01-20 12:31
2005.02.20
SQL BUILDER


4-1104108081
XProger
2004-12-27 03:41
2005.02.20
Две мышки


1-1107423237
Proga
2005-02-03 12:33
2005.02.20
MSDE и Delphi...


14-1106953426
Narik
2005-01-29 02:03
2005.02.20
Скачайте Demo Delphi 2005





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский