Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "WinAPI";
Текущий архив: 2006.09.24;
Скачать: [xml.tar.bz2];

Вниз

PID -> ExeName   Найти похожие ветки 

 
Чапаев ©   (2006-05-22 10:44) [0]

Собственно, нужно по идентификатору процесса получить имя исполняемого файла.

Пользуюсь такой функцией (почти перевод MSDN"a на Делфи):

var
 Proc:THandle;
 Modules:array [0..$3FFF] of THandle;
 Count:Cardinal;
 FileName:array [Byte] of Char;
begin
 Result:="";
 Proc:=OpenProcess(PROCESS_QUERY_INFORMATION or PROCESS_VM_READ,False,PID);
 if Proc=0 then
   Exit;
 EnumProcessModules(Proc,@Modules,$4000*SizeOf(THandle),Count);
     Count:=GetModuleFileNameEx(Proc,Modules[0],FileName,SizeOf(FileName));
 if Count>0 then begin
   Result:=FileName;
 end;
end;

Или такой:

var
 Snapshot:THandle;
 ME:MODULEENTRY32;
begin
 Snapshot:=CreateToolhelp32Snapshot(TH32CS_SNAPMODULE,PID);
 ME.dwSize:=SizeOf(ME);
 if Module32First(Snapshot,ME)
   then Result:=ME.szExePath
   else Result:="";
 CloseHandle(Snapshot);
end;


Функция вызывается по таймеру для вновь созданных процессов в цикле repeat ... until ExeName<>"". Для большинства процессов несколько первых вызовов функции неуспешны, для некоторых (mspaint) -- неуспешны все вызовы. SysErrorMessage(GetLastError) после EnumProcessModules() в таком случае выдаёт что-то вроде "Память может быть прочитана только частично" (дословно сообщение не помню).

Люди добрые, мы сами не местные, поможите, кто чем может!


 
begin...end ©   (2006-05-22 11:01) [1]

В чём смысл вызова EnumProcessModules, если в GetModuleFileNameEx вторым параметром можно передать 0?


 
Игорь Шевченко ©   (2006-05-22 11:03) [2]

SeDebugPrivilege установи


 
Чапаев ©   (2006-05-22 12:40) [3]


> если в GetModuleFileNameEx вторым параметром можно передать
> 0

Попробую, но, помнится, были с этой функцией проблемы... Какие именно -- забыто за давностью лет.


> SeDebugPrivilege установи

Попробую.


 
Чапаев ©   (2006-05-24 13:26) [4]


 Proc:=OpenProcess(PROCESS_ALL_ACCESS{PROCESS_QUERY_INFORMATION or PROCESS_VM_READ},False,PID);
 if Proc=0 then
   Exit;
//взято из FAQ DelphiWorld    
 if OpenProcessToken(GetCurrentProcess,TOKEN_ALL_ACCESS, Token) then
//пробовал так же первым параметром передавать Proc
//права доступа ALL_ACCESS выставил только пробы ради
begin
   tp.PrivilegeCount := 1;
   LookupPrivilegeValue(nil,"SeDebugPrivilege", tp.Privileges[0].Luid)ж
   tp.Privileges[0].Attributes := SE_PRIVILEGE_ENABLED;
   AdjustTokenPrivileges(Token, False, TP, SizeOf(TP), nil, Count);
 end;
//Lookup и Adjust выполняются успешно

 //Вот тут находится одна из приведенных в исходном сообщении функций
 //Всё равно получаю ту самую ошибку.

 CloseHandle(Token);
 CloseHandle(Proc);


 
uncle_lenia ©   (2006-05-24 14:24) [5]

function GetModuleNameInVerPlatformWin32NT(dwProcessId: DWORD): String;
var
 hProcHand: THandle;
 cbNeeded: DWORD;
 Module: HMODULE;
 ModuleName: array[0..MAX_PATH] of Char;
begin
 hProcHand := OpenProcess(PROCESS_QUERY_INFORMATION or PROCESS_VM_READ,
   False, dwProcessId);
 EnumProcessModules(hProcHand, @Module, 4, cbNeeded);
 SetString(Result, ModuleName,
   GetModuleFileNameEx(hProcHand, Module, ModuleName, SizeOf(ModuleName)));
 if hProcHand <> 0 then
   CloseHandle(hProcHand);
end;



Страницы: 1 вся ветка

Форум: "WinAPI";
Текущий архив: 2006.09.24;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.46 MB
Время: 0.042 c
2-1157200732
Sam Stone
2006-09-02 16:38
2006.09.24
Параметр для потока


2-1157412618
Fly`
2006-09-05 03:30
2006.09.24
запустить приложение сразу в tray


15-1157228424
Chort
2006-09-03 00:20
2006.09.24
Разогнать видеокарту


15-1157424311
balepa
2006-09-05 06:45
2006.09.24
Windows 2000 не видит 300Gb


9-1135794926
n0p
2005-12-28 21:35
2006.09.24
OpenGl in 2d =)





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