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

Отслеживание Работающих Программ с Повышенными Привилегиями в Delphi

Delphi , ОС и Железо , Windows

Вопрос, поставленный пользователем Mark Billig, заключается в необходимости отслеживания запущенных программ, в том числе с повышенными привилегиями, аналогично функционалу "Диспетчер задач" в Windows. Проблема заключалась в получении "File Description" для процессов, работающих с повышенными привилеями.

Решение Проблемы

Использование PROCESS_QUERY_LIMITED_INFORMATION

Рему Лебёфу (Remy Lebeau) предложил использовать константу PROCESS_QUERY_LIMITED_INFORMATION вместо комбинации PROCESS_QUERY_INFORMATION и PROCESS_VM_READ. Это позволило успешно получить информацию о модуле процесса. Пример кода, который Mark Billig успешно изменил:

hProcess := OpenProcess(PROCESS_QUERY_LIMITED_INFORMATION, False, PID);

Использование функций для получения пути модуля

Также Рему рекомендовал использовать функции GetProcessImageFileName() или QueryFullProcessImageName(), которые, по его словам, должны быть более совместимы с процессами, работающими с повышенными привилегиями.

Получение "File Description"

После получения пути к исполняемому файлу можно использовать функцию VerQueryValue() для извлечения "File Description" из ресурсов исполняемого файла.

Пример Кода

var
  Process: TProcessInfo;
  FileName: string;
  VersionInfo: PVersion;
  Buffer: THandle;
  FileDescription: string;
begin
  // Получение пути к исполняемому файлу процесса
  GetProcessImageFileName(hProcess, FileName, SizeOf(FileName));

  // Получение указателя на буфер с информацией о версии
  Buffer := VerQueryValue(PChar(FileName + ''), '', Pointer(VersionInfo), SizeOf(VersionInfo));

  // Получение строки с описанием файла
  FileDescription := VersionInfo^.Data[0].szFileDescription;

  // ... дальнейшая обработка информации
end;

Альтернативное Решение

В качестве альтернативного решения можно использовать WinAPI функцию EnumProcesses(), которая перечисляет идентификаторы процессов, работающих на компьютере. После получения списка идентификаторов можно использовать функцию GetProcessImageFileNameEx() для получения пути к исполняемому файлу каждого процесса.

var
  ProcessIDs: TArray<Cardinal>;
  BytesReturned: Cardinal;
begin
  EnumProcesses(@ProcessIDs[0], SizeOf(ProcessIDs), BytesReturned);

  // Перебор всех идентификаторов процессов и получение информации о них
  for var i := Low(ProcessIDs) to High(ProcessIDs) do
  begin
    if ProcessIDs[i] <> 0 then
    begin
      // Получение пути к исполняемому файлу процесса
      GetProcessImageFileNameEx(GetCurrentProcess(), ProcessIDs[i], FileName, SizeOf(FileName));
      // ... дальнейшая обработка информации
    end;
  end;
end;

Заключение

Использование PROCESS_QUERY_LIMITED_INFORMATION в сочетании с GetProcessImageFileName() или QueryFullProcessImageName() является эффективным решением для получения информации о запущенных приложениях, включая те, что работают с повышенными привилегиями. Приведенные примеры кода демонстрируют, как можно реализовать этот функционал в приложениях на Delphi.

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

Mark Billig столкнулся с необходимостью отслеживания запущенных программ и получения 'File ' для процессов с повышенными привилегиями, что обычно затруднительно из-за ограничений безопасности.


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

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




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


:: Главная :: Windows ::


реклама


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

Время компиляции файла: 2024-12-22 20:14:06
2025-01-13 16:39:33/0.0054349899291992/1