![]() |
|
|
|||||||
| Регистрация | << Правила форума >> | 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
|