Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 30.06.2011, 18:06   #1
)Игнат(
Форумчанин
 
Регистрация: 06.01.2008
Сообщений: 180
Вопрос Доступ к процессу

Здравствуйте, уважаемые.
Суть вопроса в следующем:
Пишу простенький диспетчер задач, с функцией вывода информации о процессе(производитель экзешника, путь к файлу) и с функцией убийства процесса.
Думаю, многие из вас сталкивались с ситуацией, когда вредоносными программами(Вирусами) отключался регэдит и диспетчер задач.

Есть PID процесса, есть функция, убивающая процесс.
Процесс можно убить почти любой.(не получалось убить только avp.exe - каспер)
Но, это при запуске программы из-под компилятора.(кнопка F9 - Run)
Если скомпилировать, и запустить - то некоторые процессы убить не получается. Подозреваю, что отказано в доступе.
error code: 6
Если запускать в режиме дебаггера - то возвращается 0 код и процесс убит.
Антивирус не при чем.
Функция:
Код:
function KillProcess(PID: Integer): Integer;
var
  PH, EC: Cardinal;
begin
  Result:= 0;
  PH:= OpenProcess(PROCESS_ALL_ACCESS, True, PID);
  GetExitCodeProcess(PH, EC);
  if (PH = 0) then
    Result:= GetLastError
  else begin
    if not TerminateProcess(PH, EC) then
      Result:= GetLastError;
    CloseHandle(PH);
  end;
end;
Вопросы:
1) Коим образом можно извлечь информацию о производителе?(майкрософт, адоб, и.т.п.)
2) Коим образом можно получить необходимый доступ к процессу, не зависимо от компилятора?
)Игнат( вне форума Ответить с цитированием
Старый 01.07.2011, 17:22   #2
)Игнат(
Форумчанин
 
Регистрация: 06.01.2008
Сообщений: 180
По умолчанию

Решение нашел на другом форуме.
Если интересно:
Права доступа:
Код:
procedure TForm1.FormCreate(Sender: TObject);
begin
  AdjustProcessPrivilege('SeDebugPrivilege');
end;
Функция AdjustProcessPrivilege
Код:
function AdjustProcessPrivilege(PrivilegeName: WideString): Boolean;
var
  TokenHandle: Cardinal;
  TokenPrivileges: TTokenPrivileges;
  ReturnLength: Cardinal;
begin
  Result := False;
  try
    if Windows.OpenProcessToken(GetCurrentProcess, TOKEN_ADJUST_PRIVILEGES or TOKEN_QUERY, TokenHandle) then
    begin
      try
        LookupPrivilegeValueW(nil, PWideChar(PrivilegeName), TokenPrivileges.Privileges[0].Luid);
        TokenPrivileges.PrivilegeCount := 1;
        TokenPrivileges.Privileges[0].Attributes := SE_PRIVILEGE_ENABLED;
        if AdjustTokenPrivileges(TokenHandle, False, TokenPrivileges, 0, nil, ReturnLength) then
          Result := True;
      finally
        CloseHandle(TokenHandle);
      end;
    end;
  except
    Exit;
  end;
end;

Последний раз редактировалось )Игнат(; 01.07.2011 в 18:58.
)Игнат( вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Список DLL подключенных к процессу Horus92 Win Api 9 01.07.2010 09:32
Узнать полный путь к процессу в Vista abyss_by Win Api 3 26.03.2010 11:47
Handle окна по процессу Sensizu Общие вопросы Delphi 9 08.01.2010 14:42
окна, принадлежащие процессу Var17 Win Api 3 04.12.2009 13:21
штоусе dll к процессу и работа с ней Mixasik Общие вопросы Delphi 4 06.06.2009 19:07