![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Избитая тема с процессами
Hirara © (2002-12-08 21:38:00)Код :
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;
Вместо модуля процесса пишет знак вопроса, в чом неправильно?
Almaz (2002-12-11 00:20:00) [1]
> Hirara © (10.12.02 12:42)
> еще вопрос:
> id=0 and Handle=0 что за процесс?
Idle (Бездействие системы)
> там еще много типа того процессов, где нули есть, так вот
> в них путь не определяет.........
Если Handle = 0, а ID <> 0 то скорее всего, вашему процессу просто не хватает привелегий, чтобы получить доступ к этим процессам. Для начала, просто запустите TaskManager - и посмотрите там на процессы с этими ID-ами. Если там имя файла корректно определяется, то тогда попробуйте в своей программе установить Debug привелегии (см. описаниеOpenProcessToken - LookupPrivilegeValue, AdjustTokenPrivileges)
Удачи.
Hirara (2002-12-10 12:42:00) [2]
> Almaz
еще вопрос:
id=0 and Handle=0 что за процесс?
id = 4 and Handle = 1908 что за процесс?
id = 596 and Handle = 0 что за процесс?
там еще много типа того процессов, где нули есть, так вот в них путь не определяет.........
Hirara (2002-12-10 11:20:00) [3]
> Almaz
Спасибо, все круто ))
Только путь иногда коряво определяется, типа там диск не пишет какой
Almaz (2002-12-10 02:48:00) [4]
> 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-09 21:30:00) [5]up
Hirara (2002-12-09 15:45:00) [6]
> 2DarkGreen
Все равно не работает, вместо пути пишет ? , Может из за того что у меня XP ?
DarkGreen (2002-12-09 14:04:00) [7]GetModuleFileNameEx(ProcHand,ModHand,@ModName[0],SizeOf(ModName));
Oleg_Gashev (2002-12-08 22:11:00) [8]http://firststeps.ru/mfc/winapi/r.php?32