Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "WinAPI";
Текущий архив: 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;




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

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

Наверх





Память: 0.46 MB
Время: 0.005 c
1-57762
andreik
2002-04-05 15:43
2002.04.18
Ширина делений в ProgressBar


7-57892
Mush[RUM]
2002-01-21 17:12
2002.04.18
Rat


4-57913
skywalker
2002-02-15 13:20
2002.04.18
Получение информации о процессах под NT!!!!!!!!


3-57594
VAleksey
2002-03-26 12:25
2002.04.18
ADO


3-57615
sysoper
2002-03-28 07:10
2002.04.18
Ошибка в IB5.6 +Win2000 server+sp2





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