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




Вниз

CeateToolHelp32SnapShot на NT работает? 


skywalker   (2002-02-14 15:54) [0]

Кто знает есть ли в ЭНТевом кернеле эта функция - CeateToolHelp32SnapShot? Если нет, то есть ли аналогичная?



MBo   (2002-02-14 16:10) [1]

надо пользоваться PSAPI - EnumProcesses и т.д.



MBo   (2002-02-14 16:11) [2]

З.Ы. 14 глава Тексейры в статьях



skywalker   (2002-02-14 16:12) [3]

Спасиб за совет, ща попробую...



Fellomena   (2002-02-14 17:08) [4]

Однозначно ф-ии CeateToolHelp32SnapShot в NT точно нет. Аналогичная конечно же есть. Подробнее смотри статью на www.void.ru - в архивах. Называется, вроде, обнаружения процессов в NT или что-то созвучное.



skywalker   (2002-02-14 17:11) [5]

НУ получу я идентификатор процесса, а дальше что с ним делать? Ведь мне надо получить имя исполняемого файла. Какую функцию нужно использовать? Я уже два часа в справках копаюсь и нифига не нашел.. :(



Fellomena   (2002-02-14 17:48) [6]

Короче, объясняю по рабоче-крестьянски на примере CeateToolHelp32SnapShot, с NT-ым аналогом тоже самое !
Делаешь примерно следующие - пишу по памяти, так что ляпы есть наверное - сам проверишь;

HProc:=CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0); { создаём слепок процессов }
lppe.dwSize:=sizeof(PROCESSENTRY32); { определяем размер структуры }
Process32First(HProc, lppe); { возвращает инфу о первом найденном в созданном слепке процессе }
//...
While Process32Next(HProc, lppe) do
begin
//...

lppe здесь - это структура, описание которой можно за 2 итерации в SDK найти !
Есть в этой структуре поле, содержащее в себе имя модуля и полный путь модуля из которого данный процесс был загружен.
Т.е. делаешь
var
s: string
begin
s:= lppe.ModulName; // или как там оно называться будет

Понятно ?



skywalker   (2002-02-14 18:59) [7]

Вот я сочинил какую функцию, но вне есть проблема, передавать
данные динамического массива вот таким пойнетром (@PIDs или @ModHndls) некоректо, может знает кто, как правильно это сделать?


function CheckOutExeNT(Exename:string):boolean;
type
TEnumProcesses=function(lpidProcess:LPDWORD; cb:DWORD; var cbNeeded:DWORD):BOOL stdcall;
TEnumProcessModules=function(hProcess:THandle; lphModule:LPDWORD; cb:DWORD; var lpcbNeeded:DWORD):BOOL;
TGetModuleFileNameExA=function(hProcess:THandle; hModule:HMODULE;lpFilename:PAnsiChar; nSize:DWORD):DWORD stdcall;
var
EnumProcesses:TEnumProcesses;
EnumProcessModules:TEnumProcessModules;
GetModuleFileNameExA:TGetModuleFileNameExA;
hPSAPI:THandle;
PIDs:array of dword;
pbNeeded:dword;
ProcHandle:THandle;
ModHndls:array of THandle;
mbNeeded:dword;
Counter,Counter1:longword;
ModuleName:string;
begin
Result:=false;
hPSAPI:=LoadLibrary("PSAPI.dll");
if hPSAPI<32 then
begin
Result:=false;
Exit
end;
EnumProcesses:=GetProcAddress(hPSAPI, "EnumProcesses");
EnumProcessModules:=GetProcAddress(hPSAPI, "EnumProcessModules");
GetModuleFileNameExA:=GetProcAddress(hPSAPI, "GetModuleFileNameExA");

pbNeeded:=1004;
repeat
SetLength(PIDs,(pbNeeded div 4)+10)
until EnumProcesses(PIDs,Length(PIDs),pbNeeded)<>false;
for Counter:=0 to (pbNeeded div 4)-1 do
begin
ProcHandle:=OpenProcess(PROCESS_VM_READ,false,PIDs[Counter]);
mbNeeded:=1004;
repeat
SetLength(ModHndls,(mbNeeded div 4)+10)
until EnumProcessModules(ProcHandle,@ModHndls,Length(ModHndls),mbNeeded)<>false;
for Counter1:=0 to (mbNeeded div 4)-1 do
begin
SetLength(ModuleName,MAX_PATH);
GetModuleFileNameExA(ProcHandle,ModHndls[Counter],pchar(ModuleName),MAX_PATH);
if UpperCase(ExtractFileName(string(ModuleName)))=UpperCase(Exename) then
begin
Result:=true;
break
end
end;
CloseHandle(ProcHandle);
if Result then break
end
end;




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




Наверх





Память: 0.73 MB
Время: 0.024 c
3-57649           Дмитрий_Ч             2002-03-28 13:14  2002.04.18  
Ну скажмите наконец!!!!


7-57905           Jorchick              2002-01-21 14:04  2002.04.18  
Эмуляция клика мышки


3-57656           fishka                2002-03-28 14:24  2002.04.18  
InterBase. Обновить таблицу значениями из другой таблицы другой


1-57778           Zool                  2002-04-05 16:34  2002.04.18  
_FileTime


1-57742           Kirill_Other          2002-04-05 12:35  2002.04.18  
Как увидеть добавленные свойства published в Object Inspector