Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2005.10.02;
Скачать: CL | DM;

Вниз

Проблема с OpenProcess   Найти похожие ветки 

 
Anonim   (2005-08-08 10:34) [0]

Почему функция OpenProcess возвращает для всех ID (их около 30) полученных функцией EnumProcesses один и тот же не нулевой Handle?


 
begin...end ©   (2005-08-08 10:46) [1]

Код можно увидеть?


 
n0name   (2005-08-08 11:52) [2]

Неправильно используешь OpenProcess.


 
begin...end ©   (2005-08-08 11:58) [3]

> Anonim

Сейчас попробовал -- у меня то же самое. Использовал такой код:

var
 ProcList: array [1..1024] of Cardinal;
 I, ProcHandle, ProcCount: Cardinal;
begin
 if EnumProcesses(@ProcList, sizeof(ProcList), ProcCount) then
 begin
   ProcCount := ProcCount div sizeof(Cardinal);
   for I := 1 to ProcCount do
   begin
     ProcHandle := OpenProcess(PROCESS_QUERY_INFORMATION, False, ProcList[I]);
     try
       Memo.Lines.Add(IntToStr(ProcHandle))
     finally
       CloseHandle(ProcHandle)
     end
   end
 end
end.


Вероятно, ничего страшного в этом нет. Хоть новый хэндл и имеет такое же значение, как и старый, но связан он уже с другим процессом. Вот если бы закрытия хэндла (CloseHandle) после его получения не было, и вызовы OpenProcess для разных процессов возвращали бы одинаковые значения, тогда стоило бы задумываться.


 
begin...end ©   (2005-08-08 12:14) [4]

var
 ProcList: array [1..1024] of Cardinal;
 FileName: array [0..MAX_PATH] of Char;
 I, ProcHandle, ProcCount: Cardinal;
begin
 if EnumProcesses(@ProcList, sizeof(ProcList), ProcCount) then
 begin
   ProcCount := ProcCount div sizeof(Cardinal);
   for I := 1 to ProcCount do
   begin
     ProcHandle := OpenProcess(PROCESS_QUERY_INFORMATION or PROCESS_VM_READ, False, ProcList[I]);
     if ProcHandle <> 0 then
       try
         if GetModuleFileNameEx(ProcHandle, 0, @FileName, sizeof(FileName)) <> 0 then
           Memo.Lines.Add(Format("Handle: %d; File: %s", [ProcHandle, FileName]))
       finally
         CloseHandle(ProcHandle)
       end
     end
   end
end.


Хэндлы одинаковые, а имена файлов модулей -- разные. Так что -- ничего страшного. Главное, что в одно и то же время нет двух хэндлов, имеющих одинаковое значение, но относящихся при этом к разным процессам.



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

Текущий архив: 2005.10.02;
Скачать: CL | DM;

Наверх




Память: 0.47 MB
Время: 0.042 c
1-1126100482
avsam
2005-09-07 17:41
2005.10.02
тип файла (bmp или jpeg)?


1-1126172991
ashnurov
2005-09-08 13:49
2005.10.02
XComDrv


14-1126178277
Тульский
2005-09-08 15:17
2005.10.02
Функция 1С 7.7 глОтобратьСтрокиТаблицы()


1-1125990584
Гена
2005-09-06 11:09
2005.10.02
Отключение системного меню


5-1101217264
main
2004-11-23 16:41
2005.10.02
Перекрытие события компонента