![]() |
|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
|||
|
|||
![]() Выдает весьма странные результаты следующий код:
Код:
rocedure TForm1.Button3Click(Sender: TObject); var pID:array[0..1024] of DWORD;//ID поцессов от функции EnumProcess hp:THandle;//open handle to the specified process(от функции OpenProcess) cbNeeds:dword;//Сколько требовалось для списка IDшек и именни процесса i:integer; procname:array[0..255] of WideChar; //буфер для имени str:string; //буфер для преобразования begin if EnumProcesses(@pID,sizeof(pID),cbNeeds)=true then //перечисляем процессы begin if cbNeeds<=sizeof(pID) then//проверяем хватило ли места? begin for i := 0 to 1024 do begin hP := OpenProcess(PROCESS_QUERY_INFORMATION or PROCESS_VM_READ, false, pID[i]);//открываем процесс для получения инфы GetModuleFileNameEx(hp,0,procname,cbneeds);//получаем имя str:=WideCharToString(procname);//преобразуем Memo1.Lines.Add(str); if pos(str,'winlogon.exe')<>0 then//проверяем это winlogon? (Ищем подстроку) begin Memo1.Lines.Add(str); end; end; end end else begin showMessage(intTosTr(cbNeeds)); //выодим необходимое количество памяти в случае нехватки end; end; 1) В именах отобржает кразябру 2) Какие то процессы отображает верно, но одни и те же многократно 3) Не видит winlogon |
#2
|
||||
|
||||
![]() вот уже давно работает код:
Код:
uses PsAPI, type TForm1 = class(TForm) Memo1: TMemo; Button2: TButton; procedure Button2Click(Sender: TObject); procedure TForm1.Button2Click(Sender: TObject); var lpidProcess: array [0..$ffff] of DWORD; cbNeeded: DWORD; i: Integer; openprocesshandle: THandle; lphModule: HMODULE; lpFilename: array [0..MAX_PATH] of Char; len: Cardinal; begin Memo1.Lines.Clear; if EnumProcesses(@lpidProcess, SizeOf(lpidProcess), cbNeeded) then begin for i:=0 to cbNeeded div SizeOf(DWORD)-1 do begin openprocesshandle:=OpenProcess(PROCESS_QUERY_INFORMATION or PROCESS_VM_READ, False, lpidProcess[i]); if openprocesshandle>0 then begin if EnumProcessModules(openprocesshandle, @lphModule, SizeOf(HMODULE), cbNeeded) then begin len:=GetModuleFileNameEx(openprocesshandle, lphModule, lpFilename, SizeOf(lpFilename)); if len>0 then Memo1.Lines.Add(Copy(lpFilename, 1, len)); end; CloseHandle(openprocesshandle); end; end; end; end; |
#3
|
|||
|
|||
![]() Спасибо проблему некорректного воспроизведения имен решило. Однако Опять же тот самый процесс за которым идет охота не обнаружен. Я так понимаю что к нему требуется применить отладочные привилегии. И опять повторяется ситуация дублирования имен процессов
|
#4
|
|||
|
|||
![]() Хотя дублирования нет))Это просто Google Chrome для каждой вкладки инициирует отдельный процесс))
|
#5
|
||||
|
||||
![]() какая ОС? на XP winlogon.exe под администратором виден. на 7 проверю попозже.
|
#6
|
|||
|
|||
![]() Ось Виста и 7
|
#7
|
|||
|
|||
![]() Достаточно запустить прогу от имени админа и все увидит)Спасибо за помощь!
|