Текущий архив: 2003.01.27;
Скачать: CL | DM;
Вниз
Избитая тема с процессами Найти похожие ветки
← →
Hirara © (2002-12-08 21:38) [0]Код :
Var A : Array [0..100] of DWORD;
Count,CountMod : DWORD;
I : Integer;
ProcHand : THandle;
ModHand : HMODULE;
ModName : Array [0..255] of char;
begin
EnumProcesses(@A,SizeOf(A),Count);
Count:=Count div SizeOf(DWORD);
StringGrid1.RowCount:=Count;
For I:=0 to Count-1 do
Begin
ProcHand:=OpenProcess(Process_Query_Information or Process_vm_Read,False,A[i]);
EnumProcessModules(ProcHand,@ModHand,1,CountMod);
StringGrid1.Cells[0,i]:= IntToStr(A[i]);
StringGrid1.Cells[1,i]:= IntToStr(ProcHand);
{ If} GetModuleFileNameEx(ProcHand,ModHand,ModName,SizeOf(ModName));//>0 //then
StringGrid1.Cells[2,i]:=ModName;
End;
end;
Вместо модуля процесса пишет знак вопроса, в чом неправильно?
← →
Oleg_Gashev © (2002-12-08 22:11) [1]http://firststeps.ru/mfc/winapi/r.php?32
← →
DarkGreen © (2002-12-09 14:04) [2]GetModuleFileNameEx(ProcHand,ModHand,@ModName[0],SizeOf(ModName));
← →
Hirara © (2002-12-09 15:45) [3]
> 2DarkGreen
Все равно не работает, вместо пути пишет ? , Может из за того что у меня XP ?
← →
Hirara © (2002-12-09 21:30) [4]up
← →
Almaz © (2002-12-10 02:48) [5]
> Hirara © (08.12.02 21:38)
> Код :
>Var
> ModHand : HMODULE;
> ...
> EnumProcessModules(ProcHand,@ModHand, sizeof(ModHand),CountMod);
> ...
> end;
> Вместо модуля процесса пишет знак вопроса, в чом неправильно?
Ошибка в том, что третьим параметром необходимо указывать размер массива ссылок в байтах ! А размер ModHand не 1 байт как у вас, а 4 ;)
Но тем не менее для первых двух процессов в списке вы все равно получите "?" (Про XP не знаю, но на WinNT/2000 это так). Дело в том, что первый процесс в данном случае - это Idle (Бездействие системы), а второй - System. Для них имена модулей не определены, но вы можете ввести их самостоятельно :)
Что-то вроде:
case A[i] of //PID
0: ModName := "Бездействие системы";
8: ModName := "System";
else
...
Удачи.
← →
Hirara © (2002-12-10 11:20) [6]
> Almaz
Спасибо, все круто ))
Только путь иногда коряво определяется, типа там диск не пишет какой
← →
Hirara © (2002-12-10 12:42) [7]
> Almaz
еще вопрос:
id=0 and Handle=0 что за процесс?
id = 4 and Handle = 1908 что за процесс?
id = 596 and Handle = 0 что за процесс?
там еще много типа того процессов, где нули есть, так вот в них путь не определяет.........
← →
Almaz © (2002-12-11 00:20) [8]
> Hirara © (10.12.02 12:42)
> еще вопрос:
> id=0 and Handle=0 что за процесс?
Idle (Бездействие системы)
> там еще много типа того процессов, где нули есть, так вот
> в них путь не определяет.........
Если Handle = 0, а ID <> 0 то скорее всего, вашему процессу просто не хватает привелегий, чтобы получить доступ к этим процессам. Для начала, просто запустите TaskManager - и посмотрите там на процессы с этими ID-ами. Если там имя файла корректно определяется, то тогда попробуйте в своей программе установить Debug привелегии (см. описаниеOpenProcessToken - LookupPrivilegeValue, AdjustTokenPrivileges
)
Удачи.
Страницы: 1 вся ветка
Текущий архив: 2003.01.27;
Скачать: CL | DM;
Память: 0.48 MB
Время: 0.029 c