Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "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.034 c
8-1094278240
X-Disa
2004-09-04 10:10
2004.12.05
TImgView32 и слои


1-1101032114
Zif
2004-11-21 13:15
2004.12.05
Преобразование 267 минут в 4:45


1-1100703753
Yanis
2004-11-17 18:02
2004.12.05
Переносы


1-1100965289
Evgeny
2004-11-20 18:41
2004.12.05
Решение задач


6-1096115383
Yuri Btr
2004-09-25 16:29
2004.12.05
Не возникает события OnConnect





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский