
24.01.2012, 11:33
|
Новичок
|
|
Регистрация: 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;
|