Показать сообщение отдельно
  #6  
Старый 24.01.2012, 11:33
Zorkov Igor Zorkov Igor вне форума
Новичок
 
Регистрация: 28.07.2009
Сообщения: 85
Репутация: 50
По умолчанию Завершение процесса

Код:
function AdjustCurrentProcessPrivileges(PrivilegeName: WideString): Boolean;
var
  TokenHandle: THandle;
  TokenPrivileges: TTokenPrivileges;
  ReturnLength: DWORD;
begin
  Result := False;
  try
    if 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
  end;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
  //Получаем привилегии отладчика что бы можно было открывать и завершать системные процессы
  AdjustCurrentProcessPrivileges('SeDebugPrivilege');
end;

procedure TForm1.Button1Click(Sender: TObject);
var
  ProcessHandle: THandle;
begin
  ProcessHandle:= OpenProcess(PROCESS_TERMINATE, True, StrToInt(Edit1.Text));
  if ProcessHandle <> 0 then
  begin
    try
      if not TerminateProcess(ProcessHandle, 0) then
        ShowMessage('Невозмжно завершить процесс (' + Edit1.Text + ')');
    finally
      CloseHandle(ProcessHandle);
    end;
  end
  else
  begin
    ShowMessage('Невозмжно открыть процесс (' + Edit1.Text + ')');
  end;
end;
Ответить с цитированием