Форум: "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.159 c