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

Вниз

OpenProcess и 64bit applications...   Найти похожие ветки 

 
istok20 ©   (2009-11-28 00:15) [0]

OpenProcess в 64битной ОС срабатывает только для 32битных приложений (getlasterror говорит "отказано в доступе")

каким-то образом можно заставить его работать с 64битными процессами? какие есть варианты кроме freepascal и ожидания следующей версии delphi?

код:


procedure TForm1.Button1Click(Sender: TObject);
var
 pe: TProcessEntry32;
 ph, snap:THandle;//дескрипторы процесса и снимка
 mh: hmodule;//дескриптор модуля
 procs: array[0..$fff] of DWORD;//массив для хранения дескрипторов процессов
 count, cm: Cardinal;//количество процессов
 i: Integer;
 ModName: array[0..max_path] of char;//имя модуля
 LastIndex: Integer; // индекс последнего добавленного Proc
begin
 ListView1.Clear;

 if not EnumProcesses(@procs, sizeof(procs), count) then
 begin
   exit;
 end;
 for i := 0 to count div 4 - 1 do
 begin
 //  Application.ProcessMessages;
   ph := OpenProcess(PROCESS_QUERY_INFORMATION or PROCESS_VM_READ,
     false, procs[i]);
   if ph > 0 then
   begin
     EnumProcessModules(ph, @mh, 4, cm);
     GetModuleFileNameEx(ph, mh, ModName, sizeof(ModName));

     with ListView1.Items.Add do
     begin
       Caption := (string(ModName));
       SubItems.Add(IntToStr(procs[i]));
     end;
     CloseHandle(ph);
   end
   else
     with ListView1.Items.Add do
     begin
       Caption := "failed: " + (string(ModName));
       SubItems.Add(IntToStr(procs[i]));
       SubItems.Add(IntToStr(GetLastError) + ":" + GetSystemErrorMessage(GetLastError));
     end;
 end;
end;


спасибо


 
Игорь Шевченко ©   (2009-11-28 00:18) [1]

debug-привилегию включить ?


 
istok20 ©   (2009-11-28 01:02) [2]


> Игорь Шевченко ©   (28.11.09 00:18) [1]
> debug-привилегию включить ?


о, помогло, спасибо)

теперь борюсь с получением имени файла процесса, попробовал GetModuleFileNameExW вместо GetModuleFileNameEx - все равно не помогло - для многих x64 процессов не возвращает путь к файлу, сама ф-ция возвращает 0, вот что говорит расшифровка getlasterror: "запрос readprocessmemory или writeprocessmemory был выполнен только частично"


 
Rouse_ ©   (2009-11-28 01:12) [3]

А что пишешь?


 
istok20 ©   (2009-11-28 01:16) [4]

учёт использования программ, для которого нужно получать полный путь к файлам запущенных процессов...


 
istok20 ©   (2009-11-28 01:52) [5]

кажется отрыл точно такую же проблему на немецком форуме, надеюсь, это закроет тему...   http://www.delphipraxis.net/post976584.html


 
istok20 ©   (2009-11-28 02:13) [6]

да, сработало, вопрос закрыт:)


 
Игорь Шевченко ©   (2009-11-29 01:14) [7]


> учёт использования программ, для которого нужно получать
> полный путь к файлам запущенных процессов...


Стандартный аудит не ?



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

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

Наверх




Память: 0.48 MB
Время: 0.064 c
15-1328042693
Димка На
2012-02-01 00:44
2013.03.22
Максимальная версия программы (продукта)


15-1349627361
Roman_man
2012-10-07 20:29
2013.03.22
Формальный аттестат и Веб-Мани. Кипер Лайт


15-1351715402
Юрий
2012-11-01 00:30
2013.03.22
С днем рождения ! 1 ноября 2012 четверг


15-1353834526
dummy_user
2012-11-25 13:08
2013.03.22
Как сделать сопроводительную документацию?


2-1330273177
Михаил
2012-02-26 20:19
2013.03.22
Почему изменяются поля в глобальной переменной