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

Вниз

!ПОЛНЫЙ! путь к .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 вся ветка

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

Наверх




Память: 0.54 MB
Время: 0.04 c
1-1100860387
TankMan
2004-11-19 13:33
2004.12.05
Как запускать с параметрами так это легко, а как возвращать...


3-1099463364
Sour
2004-11-03 09:29
2004.12.05
MySQL


14-1100646539
Andy BitOff
2004-11-17 02:08
2004.12.05
Что с этим можно сделать?


1-1101032493
PoUlerer
2004-11-21 13:21
2004.12.05
Menu


3-1098726843
Armada
2004-10-25 21:54
2004.12.05
Выбор сервера БД? BDE -> ??? Помогите разобраться