Модераторы: Snowy, bartram, MetalFan, bems, Poseidon, Riply

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Узнать о запущенных процессах как можно больше 
V
    Опции темы
SlaUr
Дата 12.11.2007, 09:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 408
Регистрация: 18.9.2003

Репутация: нет
Всего: 5



Здраствуйте.

В прикрепленных файлах находятся исходники программ для получения информации о запущенных процессах.
Но меня интересует как получить путь к файлу процесса, который запущен (AVZ это умеет 
вернее он показывает не путь к файлу а коммандную строку (он даже показал что программа запущенна с определенными параметрами)).Как сие узнать?


И вообще что еще можно узнать о запущенных прцессах,кроме того что узнается в примерах приклепленных к топику.

Присоединённый файл ( Кол-во скачиваний: 68 )
Присоединённый файл  procinfo_tascmon.rar 28,17 Kb
PM MAIL   Вверх
MetalFan
Дата 12.11.2007, 09:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Аццкий Сотона
****


Профиль
Группа: Комодератор
Сообщений: 3815
Регистрация: 2.10.2006
Где: Moscow

Репутация: 16
Всего: 128



Цитата(SlaUr @  12.11.2007,  09:15 Найти цитируемый пост)
как получить путь к файлу процесса

уже не раз обсуждался этот вопрос! в поиск.

Это сообщение отредактировал(а) MetalFan - 12.11.2007, 09:43


--------------------
There are always someone smarter than you...
PM MAIL   Вверх
SlaUr
Дата 12.11.2007, 13:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 408
Регистрация: 18.9.2003

Репутация: нет
Всего: 5



Спасибо

Где искать GetModuleFileNameEx ? (компилятор ругается)
Подскажите а то самому долго искать.


Кстати насколько я понял это функция возращает путь а AVZ еще и показывает опции коммандной строки видимо она пользуется не этой функцией.



Это сообщение отредактировал(а) SlaUr - 12.11.2007, 13:25
PM MAIL   Вверх
MetalFan
Дата 12.11.2007, 13:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Аццкий Сотона
****


Профиль
Группа: Комодератор
Сообщений: 3815
Регистрация: 2.10.2006
Где: Moscow

Репутация: 16
Всего: 128



Цитата(SlaUr @  12.11.2007,  13:25 Найти цитируемый пост)
Где искать GetModuleFileNameEx ? 

PsAPI

Добавлено через 3 минуты и 59 секунд
Цитата(SlaUr @  12.11.2007,  13:25 Найти цитируемый пост)
еще и показывает опции коммандной строки

а вторую сылку смотрел?


--------------------
There are always someone smarter than you...
PM MAIL   Вверх
SlaUr
Дата 12.11.2007, 14:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 408
Регистрация: 18.9.2003

Репутация: нет
Всего: 5



Посмотрю попозже , спасибо

Я уже тоже нашел где эта функция и меня посетила идея сделать програму которая будет автоматически искать проседуры и функции (в delphi и в .dll) чтобы всем было проще.


Все таки вопрос остается открытым : что-то еще можно узнать о процессах кроме того что есть в прикрепленных файлов (сейчас еще добавилась возможность узнать путь) ?
PM MAIL   Вверх
MetalFan
Дата 12.11.2007, 14:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Аццкий Сотона
****


Профиль
Группа: Комодератор
Сообщений: 3815
Регистрация: 2.10.2006
Где: Moscow

Репутация: 16
Всего: 128



Цитата(SlaUr @  12.11.2007,  14:41 Найти цитируемый пост)
что-то еще можно узнать о процессах кроме того что есть в прикрепленных файлов

не знаю, что там в "прикрепленных файлов", но узнать можно все, что сам процесс о себе знает. главное знать, где брать)


--------------------
There are always someone smarter than you...
PM MAIL   Вверх
SlaUr
Дата 13.11.2007, 16:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 408
Регистрация: 18.9.2003

Репутация: нет
Всего: 5



Попробовал 3 способа 

Код

unit pathproc ;
interface
uses    Windows, SysUtils,TlHelp32,PsAPI;
{  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs,myproc2, StdCtrls, ExtCtrls,mysys,mystr,tlhelp32,PsAPI;}
type
 TModuleArray = array of TModuleEntry32;
// Возвращает список описаний (TModuleEntry32) модулей по идентификатору процесса

Function PidProc2Path(Pid:word):string;
Function HandleProc2Path(wnd:tHandle):string;

implementation

Function HandleProc2Path(wnd:tHandle):string;
var pid:word;
begin
GetWindowThreadProcessId(Wnd,@Pid);
Result:=PidProc2Path(pid);
end;

function GetModulesListByProcessId(ProcessId : Cardinal) : TModuleArray;
var
 hSnapshot : THandle;
 lpme : TModuleEntry32;

 procedure AddModuleToList;
   begin
     SetLength(Result,High(Result)+2);
     Result[high(Result)]:=lpme;
   end;

begin
 SetLength(Result,0);
 hSnapshot:=CreateToolhelp32Snapshot(TH32CS_SNAPMODULE,ProcessId);
 if hSnapshot=-1 then
   RaiseLastWin32Error;
 lpme.dwSize:=SizeOf(lpme);
 if Module32First(hSnapshot,lpme) then
   begin
     AddModuleToList;
     while Module32Next(hSnapshot,lpme) do
       AddModuleToList;
   end;
end;


Function PidProc2Path(Pid:word):string;
var  modarr : TModuleArray;i:integer;
     hHandle:THandle;
DW,StrAddr:dWord;GCL:cardinal;
NumWriteRead:cardinal;
str:string;
begin
str:='';
Result:='';

hHandle := OpenProcess(PROCESS_QUERY_INFORMATION or PROCESS_VM_READ, True, PID);
GCL:=Cardinal(GetProcAddress(GetModuleHandle('kernel32.dll'),'GetCommandLineA'));
        if GCL<>0 then
            begin
              if ReadProcessMemory(hHandle,Pointer(GCL+1),@DW,4,NumWriteRead)and(NumWriteRead=4)and
              ReadProcessMemory(hHandle,Pointer(DW),@StrAddr,4,NumWriteRead)and(NumWriteRead=4) then
             begin
              SetString(Result, nil, MAX_PATH);
              if ReadProcessMemory(hHandle,Pointer(StrAddr),@Result[1],Length(Result),NumWriteRead) then
                begin
                   SetLength( Result,Pos(#0, Result)-1);
                end else   Result:='';
             end;
            end;
str:=str+result+'|';

modarr:=GetModulesListByProcessId(Pid);
 for i:=0 to High(modarr) do
   begin
     if Integer(modarr[i].modBaseAddr)=$400000 then
       begin
         Result:=modarr[i].szExePath;
         break;
       end;
  end;
str:=str+result+'|';

Result:='';
SetLength (Result, MAX_PATH);
hHandle := OpenProcess(PROCESS_QUERY_INFORMATION or PROCESS_VM_READ, True, PID);
if hHandle<>0 then
 begin
  if GetModuleFileNameEx (hHandle, 0, PChar (Result), MAX_PATH) > 0 then
    SetLength (Result, StrLen (PChar (Result)));
 end;

str:=str+result+'|';

result:=str;

end.


Не один из них  не показал путь к системному процессу CSRSS.EXE
Некий ALG.EXE тоже не показал (третий вариант показал мусор - "tNЌ") 
Один из SVCHOST.EXE тоже не виден путь.

видимо есть еще какие-то варианты получения пути потому что AVZ показывает все.



Это сообщение отредактировал(а) SlaUr - 13.11.2007, 16:23
PM MAIL   Вверх
dumb
Дата 13.11.2007, 16:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


sceloglauxalbifacies
****


Профиль
Группа: Экс. модератор
Сообщений: 2929
Регистрация: 16.6.2006

Репутация: 7
Всего: 158



включи 'SeDebugPrivilege' с помощью этой функции: http://forum.vingrad.ru/index.php?showtopi...st&p=799225

PM MAIL   Вверх
Rennigth
Дата 13.11.2007, 17:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1708
Регистрация: 21.6.2004
Где: Moscow

Репутация: 8
Всего: 76



Цитата(dumb @  13.11.2007,  16:59 Найти цитируемый пост)
включи 'SeDebugPrivilege' с помощью этой функции: http://forum.vingrad.ru/index.php?showtopi...st&p=799225

Ага, сам сталкивался... или если без,то информацию излекать через SystemQueryInfomation.


--------------------
(* Honesta mors turpi vita potior *)
PM MAIL ICQ   Вверх
MetalFan
Дата 13.11.2007, 21:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Аццкий Сотона
****


Профиль
Группа: Комодератор
Сообщений: 3815
Регистрация: 2.10.2006
Где: Moscow

Репутация: 16
Всего: 128



Цитата(Rennigth @  13.11.2007,  17:30 Найти цитируемый пост)
через SystemQueryInfomation.

имелось ввиду NtQuerySystemInformation ?


--------------------
There are always someone smarter than you...
PM MAIL   Вверх
Ak47black
Дата 13.11.2007, 22:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2205
Регистрация: 2.12.2005

Репутация: нет
Всего: 0



У Rouse_, на сайте есть пример неплохой про процессы http://rouse.drkb.ru/winapi.php#taskmon
Называется 
Цитата

Информация о процессах.



Это сообщение отредактировал(а) Ak47black - 13.11.2007, 22:19
PM MAIL   Вверх
SlaUr
Дата 14.11.2007, 07:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 408
Регистрация: 18.9.2003

Репутация: нет
Всего: 5



Цитата

 на сайте есть пример неплохой про процессы http://rouse.drkb.ru/winapi.php#taskmon

Так он (и еще один пример) и находится в прикрепленных файлах.В этом примере и применяется NtQuerySystemInformation,как я ни пытался информацию об запускающем файле мне получить не удалось.


dumb, Спасибо помогло.
Кстати интересно что к процессам SMSS.EXE,CSRSS.EXE путь показывает только 3 способ в моем примере (см.выше) .

Удачи.


PM MAIL   Вверх
Rennigth
Дата 14.11.2007, 11:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1708
Регистрация: 21.6.2004
Где: Moscow

Репутация: 8
Всего: 76



Цитата(MetalFan @  13.11.2007,  21:41 Найти цитируемый пост)
имелось ввиду NtQuerySystemInformation ? 

Nt или Zw



--------------------
(* Honesta mors turpi vita potior *)
PM MAIL ICQ   Вверх
Rouse_
Дата 14.11.2007, 14:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 469
Регистрация: 23.4.2005

Репутация: 18
Всего: 29



Цитата(SlaUr @  12.11.2007,  10:15 Найти цитируемый пост)
Но меня интересует как получить путь к файлу процесса

WMI позволяет отобразить как путь к процессу так и параметры командной строки.


--------------------
 Vae Victis
(Горе побежденным (лат.))
Демо с открытым кодом: http://rouse.drkb.ru 
PM MAIL WWW ICQ   Вверх
SlaUr
Дата 14.11.2007, 14:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 408
Регистрация: 18.9.2003

Репутация: нет
Всего: 5



Окончательный вариант модуля
(обьедены 2 способа получения пути)
2й способ показывает путь всегда , зато первый показывает параметры коммандной строки.
Код

unit pathproc ;
interface
uses  Windows,SysUtils,PsAPI;
Function PidProc2Path(Pid:word):string;
Function HandleProc2Path(wnd:tHandle):string;

implementation


function SetPrivilege(aPrivilegeName: string; aEnabled: boolean ): boolean;
var
 TPPrev, TP: TTokenPrivileges;
 hToken: THandle;
 dwRetLen: DWord;
begin
 Result:= False;
 OpenProcessToken(GetCurrentProcess,TOKEN_ADJUST_PRIVILEGES or TOKEN_QUERY, hToken);
 TP.PrivilegeCount:=1;
 if (LookupPrivilegeValue(nil, PChar(aPrivilegeName), TP.Privileges[0].LUID)) then
   begin
     if (aEnabled) then TP.Privileges[0].Attributes:=SE_PRIVILEGE_ENABLED
     else TP.Privileges[0].Attributes:=0;
     dwRetLen:=0;
     Result:=AdjustTokenPrivileges(hToken,False,TP, SizeOf(TPPrev), TPPrev,dwRetLen);
   end;
 CloseHandle(hToken);
end;




Function HandleProc2Path(wnd:tHandle):string;
var pid:word;
begin
GetWindowThreadProcessId(Wnd,@Pid);
Result:=PidProc2Path(pid);
end;


Function PidProc2Path(Pid:word):string;
var   hHandle:THandle;
GCL:cardinal;DW,StrAddr:dWord;
NumWriteRead:cardinal;
st1:string;
begin
Result:='';
SetPrivilege('SeDebugPrivilege',True);

//начало 1 способа
hHandle := OpenProcess(PROCESS_QUERY_INFORMATION or PROCESS_VM_READ{PROCESS_ALL_ACCESS}, True, PID);
if hHandle<>0 then
begin
GCL:=Cardinal(GetProcAddress(GetModuleHandle('kernel32.dll'),'GetCommandLineA'));
        if GCL<>0 then
            begin
              if ReadProcessMemory(hHandle,Pointer(GCL+1),@DW,4,NumWriteRead)and(NumWriteRead=4)and
              ReadProcessMemory(hHandle,Pointer(DW),@StrAddr,4,NumWriteRead)and(NumWriteRead=4) then
             begin
              SetString(St1, nil, MAX_PATH);
              if ReadProcessMemory(hHandle,Pointer(StrAddr),@St1[1],Length(St1),NumWriteRead) then
                begin
                   SetLength( St1,Pos(#0, St1)-1);
                end else   St1:='';
             end;
            end;
end;
Result:=Result+st1+'|';
St1:='';
//начало 2 способа
hHandle := OpenProcess(PROCESS_QUERY_INFORMATION or PROCESS_VM_READ{PROCESS_ALL_ACCESS}, True, PID);
if hHandle<>0 then
 begin
  SetLength (St1, MAX_PATH);
  if GetModuleFileNameEx (hHandle, 0, PChar (St1), MAX_PATH) > 0 then
    SetLength (St1, StrLen (PChar (St1))) else St1:=''
 end;
//убираем мусор
While(length(St1)>0)and((St1[1]='?')or(St1[1]='\')) do Delete(St1,1,1);
Result:=Result+st1;


SetPrivilege('SeDebugPrivilege',False);
end;



end.




Rouse_, разбираться с WMI пока некогда , цель достигнута и меня она устраивает.Но спасибо еще за одно направление (я немного прочитал про WMI и заинтересовался тем что можно очень много узнать о "железе",буду иметь ввиду)

Добавлено через 20 мин:
Нашел запускаемый файл на основе WMI так вот ко многим процессам путь не показывает.
Вот этот файл (с исходниками) wmi.zip(800kB)
И статья которую я бегло прочитал WMI- практика применения в Delphi (ссылка на wmi.zip в конце статьи)


Это сообщение отредактировал(а) SlaUr - 14.11.2007, 15:42
PM MAIL   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: WinAPI и системное программирование"
Snowybartram
MetalFanbems
PoseidonRrader
Riply

Запрещено:

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Delphi обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи
  • 99% ответов по WinAPI можно найти в MSDN Library, оставшиеся 1% здесь

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, bartram, MetalFan, bems, Poseidon, Rrader, Riply.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: WinAPI и системное программирование | Следующая тема »


 




[ Время генерации скрипта: 0.0776 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.