Карта сайта Kansoftware
НОВОСТИУСЛУГИРЕШЕНИЯКОНТАКТЫ
KANSoftWare

Определение 32-битного или 64-битного приложения по PID в Delphi

Delphi , Синтаксис , Справочник по API-функциям

Вопрос пользователя связан с необходимостью определения, является ли процесс с заданным PID (Process ID) 32-битным или 64-битным приложением, используя среду разработки Delphi. Для решения этой задачи можно использовать функцию IsWow64Process, которая работает с дескриптором процесса, а не с PID. Однако, для получения дескриптора процесса можно использовать функцию OpenProcess.

Оригинальный заголовок:

Определение битности приложения по PID в Delphi

Описание проблемы (вопрос):

Для выполнения поставленной задачи необходимо сначала получить дескриптор процесса, используя PID, а затем применить функцию IsWow64Process для определения битности процесса.

Решение:

Используем функцию OpenProcess для получения дескриптора процесса по его PID. После этого применяем функцию IsWow64Process для определения, запущен ли процесс в режиме WOW64 (Windows 32-bit on Windows 64-bit), что позволит вычислить его битность.

Пример кода на Object Pascal (Delphi):

{$APPTYPE CONSOLE}
uses
  Windows,
  SysUtils;

type
  TIsWow64Process = function(Handle: THandle; var IsWow64: BOOL): BOOL; stdcall;

// Инициализация функции IsWow64Process
procedure Init_IsWow64Process;
var
  hKernel32: Integer;
begin
  hKernel32 := LoadLibrary('kernel32.dll');
  if (hKernel32 = 0) then RaiseLastOSError;
  try
    TIsWow64Process = GetProcAddress(hKernel32, 'IsWow64Process');
  finally
    FreeLibrary(hKernel32);
  end;
end;

// Функция для определения битности процесса
function PidIs64BitsProcess(dwProcessId: DWORD): Boolean;
var
  IsWow64: BOOL;
  PidHandle: THandle;
begin
  Result := False;
  if Assigned(TIsWow64Process) then
  begin
    PidHandle := OpenProcess(PROCESS_QUERY_INFORMATION, False, dwProcessId);
    if PidHandle > 0 then
    try
      if TIsWow64Process(PidHandle, IsWow64) then
        Result := not IsWow64; // Если процесс в режиме WOW64, значит он 32-битный
    finally
      CloseHandle(PidHandle);
    end;
  end;
end;

begin
  try
    Init_IsWow64Process;
    // Здесь передаем PID процесса, битность которого нужно проверить
    Writeln(BoolToStr(PidIs64BitsProcess(1940), True));
  except
    on E: Exception do
      Writeln(E.ClassName, ': ', E.Message);
  end;
  Readln;
end.

Важные замечания:

Если код компилируется в 64-битной версии Delphi, результат может быть некорректным, поскольку IsWow64 из IsWow64Process для 64-битных приложений под 64-битными Windows всегда будет установлено в FALSE. Это означает, что для 64-битных процессов функция вернёт FALSE, что может быть неправильно интерпретировано как 32-битный процесс. Поэтому важно учитывать контекст выполнения программы при интерпретации результатов.

Создано по материалам из источника по ссылке.

Задача состоит в определении битности процесса (32-битного или 64-битного) по его Process ID (PID) с использованием среды разработки Delphi.


Комментарии и вопросы

Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS




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


:: Главная :: Справочник по API-функциям ::


реклама


©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007
Top.Mail.Ru

Время компиляции файла: 2024-12-22 20:14:06
2024-12-26 14:00:56/0.0032179355621338/0