Форум: "WinAPI";
Текущий архив: 2004.12.05;
Скачать: [xml.tar.bz2];
Вниз!ПОЛНЫЙ! путь к .EXE через PID или его HANDLE - как? Найти похожие ветки
← →
Grundic (2004-10-19 20:27) [0]Есть проблема - надо убивать процессы, запущенные, допустим из C:\DANGEROUS\ и разрешать все другие, окромя тех, чей экзе-файл размером, например, 10000 KB. Или что-то в этом роде.
Вобщем, как получить путь к исходному exe-шнику по его процессу? szExeName (кажется так) не пойдет - он дает только имя приложения, не указывая - откуда оно родом.
ОЧЧЕНЬ надо. Заранее спасибо. (:
← →
-=SS=- © (2004-10-19 20:46) [1]GetWindowModuleFileName
← →
Grundic (2004-10-19 22:08) [2]но ведь она только с оконными приложениями работает или нет?
← →
VMcL © (2004-10-19 22:59) [3]>>Grundic (19.10.04 20:27)
http://delphimaster.net/view/4-1098156661/ :: [1]
← →
Grundic (2004-10-19 23:52) [4]2 VMcL
Не, не канает - эти ф-ции дают только сухое имя файла, а не полный путь к нему...
← →
VMcL © (2004-10-20 00:12) [5]>>Grundic (19.10.04 23:52) [4]
Значит, радиус отличается от ГОСТовского.
← →
GuAV © (2004-10-20 00:18) [6]VMcL © (20.10.04 0:12) [5]
Значит, радиус отличается от ГОСТовского.
:-) Хорошая фраза, надо запомнить
← →
Alex_Petr © (2004-10-20 00:23) [7]GetModuleFileNameEx
← →
Grundic (2004-10-20 11:03) [8]Alex_Petr - сэнкс! :) Уже хоть что-то!..
← →
Grundic (2004-10-20 11:29) [9]Кому надо - вот процедурка:
procedure GetProcesses(vle:TValueListEditor);
var
hsnapshot: thandle;
procentry: tprocessentry32;
leng:Integer;
s,s1:String;
hProcess:Cardinal;
hMod: HMODULE;
cm: cardinal;
pc:PAnsiChar;
i:Integer;
begin
for i:=vle.RowCount-2 downto 1 do
vle.DeleteRow(i);
hsnapshot:=CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0);
procentry.dwSize:=sizeof(PROCESSENTRY32);
if Process32First(hsnapshot,procentry) then
begin
repeat
begin
s:=procentry.szExeFile;
hProcess:=OpenProcess(PROCESS_QUERY_INFORMATION+PROCESS_VM_READ,FALSE,procentry.th32ProcessID);
if hProcess<>0 then
begin
EnumProcessModules(hProcess, @hMod, 4, cm);
GetMem(pc,260);
GetModuleFileNameEx(hProcess,hMod,pc,260);
s1:=string(pc);
FreeMem(pc);
if s1[2]<>":" then s1:=s;
end
else
begin
s1:=s;
end;
CloseHandle(hProcess);
if FileExists(s1) then
begin
leng:=GetFileSize(_lopen(PChar(s1),OF_READ),NIL);
s1:=s1+" "+IntToStr(leng);
end;
VLE.InsertRow(s,s1,True);
end;
until not Process32Next(hsnapshot,procentry);
end;
CloseHandle(hsnapshot);
vle.DeleteRow(1);
end;
← →
WL (2004-10-20 15:08) [10]А никто не подскажет, можно ли получить всю командную строку, т.е. имя exe-шника и параметры запуска?
← →
VMcL © (2004-10-20 17:01) [11]>>WL (20.10.04 15:08) [10]
Можно.
← →
WL (2004-10-20 17:56) [12]> VMcL © (20.10.04 17:01) [11]
Тогда вопрос - как?
Нашел, как получить через WMI и Win32_Process, но нужное свойство есть только под Win XP, а надо в 2000...
← →
Alex_Petr © (2004-10-20 18:24) [13]ReadProcessMemory ?
← →
DeadMeat © (2004-10-21 00:44) [14]Насколько я знаю, GetCommandLine
Но не все так просто...
У Рихтера есть примерчик.
---
...Death Is Only The Begining...
← →
VMcL © (2004-10-21 07:41) [15]>>DeadMeat © (21.10.04 00:44) [14]
В принципе можно и через ReadProcessMemory.
← →
WL (2004-10-21 11:07) [16]Спасибо за советы, попробую через ReadProcessMemory, хотя хотелось бы чего-то более "цивилизованного".
> DeadMeat © (21.10.04 00:44) [14]
А можно немного поподробнее, как вызвать GetCommandLine из чужого процесса, или ссылочку, где почитать об этом...
← →
VMcL © (2004-10-21 11:22) [17]>>WL (21.10.04 11:07) [16]
>А можно немного поподробнее, как вызвать GetCommandLine из чужого процесса
Внедрить DLL посредством SetWindowsHookEx или CreateRemoteThread. Тогда эта DLL будет работать в ВАП нужного процесса и там можно смело вызвать GetCommandLine. Далее с помощью любого удобного механизма межпроцессного взаимодействия передать полученную строку в базовый процесс. Ну и последнее: отключить Hook или остановить Remote Thread.
← →
VMcL © (2004-10-21 11:23) [18]>где почитать об этом...
Можно здесь:
http://podgoretsky.com/ftp/Docs/Classics/Richter/
← →
WL (2004-10-21 11:34) [19]Большое спасибо, буду пробовать
← →
Grundic (2004-10-21 11:41) [20]Перцы! Нашел баг у себя в коде!!! Не стал разбираться - что да как.
Вот изменение процедуры:
Вместо
if hProcess<>0 then
поставил
if (hProcess<>0) and (s<>"System") then
При дебагинге под Дельфей это не важно, но при "автономном" запуске (опять же, не разбирался - почему) это райзило ОШИБКУ чтения памяти...
← →
Игорь Шевченко © (2004-10-21 11:42) [21]
> А никто не подскажет, можно ли получить всю командную строку,
> т.е. имя exe-шника и параметры запуска?
http://www.schevchenko.net.ru/SRC/EnumFunctions_60.zip
модуль main.pas, функция HSGetWindowCommandLine
← →
WL (2004-10-21 12:28) [22]> Игорь Шевченко © (21.10.04 11:42) [21]
Спасибо за функцию, пока воспользуюсь ей
← →
Digitman © (2004-10-21 12:35) [23]
> Не стал разбираться
> опять же, не разбирался - почему
считаешь, что кто-то должен за тебя разбираться ?
p.s.
использование для енумерации процессов ToolHelp-ф-ций под НТ ничем не оправдано... для этого есть PSAPI-функции или NtQuerySystemInformation()
← →
Игорь Шевченко © (2004-10-21 13:21) [24]Digitman © (21.10.04 12:35) [23]
> считаешь, что кто-то должен за тебя разбираться ?
Перцы должны.
← →
Grundic (2004-10-21 13:23) [25]
> считаешь, что кто-то должен за тебя разбираться ?
1я Заповедь: "Работает - не трогай!" :)
Пока что это мне не нужно. Хотя, я согласен, что я, возможно, не прав...
← →
Digitman © (2004-10-21 14:19) [26]
> Игорь Шевченко © (21.10.04 13:21) [24]
ты - "перец" ?
я - нет ..
> Grundic (21.10.04 13:23) [25]
> 1я Заповедь: "Работает - не трогай!" :)
оно и не работало толком
видимость "работы" - да, была ...
← →
Игорь Шевченко © (2004-10-21 15:07) [27]Digitman © (21.10.04 14:19) [26]
Ну так мы ж тобой точно не должны :)
← →
Digitman © (2004-10-21 15:19) [28]
> Игорь Шевченко © (21.10.04 15:07) [27]
да фих его знает !
мож сейчас и "круто" "перцем" быть) ...
прохлопаем мы сейчас с тобой ушами, видишь ли, ан может и вовремя было бы "перцем" назваться ?) А ? ... Игорь ? ... Как оно тобой думается ? ... То ль в "перцы" податься, то ль остаться как есть ? .. Дедами замшелыми ?))))
← →
Игорь Шевченко © (2004-10-21 17:04) [29]Digitman © (21.10.04 15:19) [28]
По мне так лучше дедами :) Мха я не замечал, а то, что некие экземпляры пытаются самоутвердиться, используя на серьезном форуме такой жаргон, говорит об их профессиональном уровне. Нам вроде самоутверждаться здесь ни к чему, а ? :))
← →
VMcL © (2004-10-21 18:44) [30]Развели тут оффтоп...
%)
← →
panov © (2004-10-21 18:47) [31]>Digitman
>Игорь Шевченко
Хватит флеймить.
← →
Grundic © (2004-10-21 21:03) [32]
> а то, что некие экземпляры пытаются самоутвердиться, используя
> на серьезном форуме такой жаргон
А Вы, типа, "отцы"?
PS: самоутверждаться и не пытаюсь, но разговор о себе, как о полном лошпенделе огорчает.
Страницы: 1 вся ветка
Форум: "WinAPI";
Текущий архив: 2004.12.05;
Скачать: [xml.tar.bz2];
Память: 0.52 MB
Время: 0.045 c