DELPHI根据进程名强制关闭进程

unit Tlhelp323;

interface

uses
Tlhelp32;


implementation

//结束进程
function TForm1.KillTask(ExeFileName: string): Integer;
const
PROCESS_TERMINATE = $0001;
var
ContinueLoop: BOOL;
FSnapshotHandle: THandle;
FProcessEntry32: TProcessEntry32;
begin
Result := 0;
FSnapshotHandle := CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
FProcessEntry32.dwSize := SizeOf(FProcessEntry32);
ContinueLoop := Process32First(FSnapshotHandle, FProcessEntry32);

while Integer(ContinueLoop) <> 0 do
begin
if ((UpperCase(ExtractFileName(FProcessEntry32.szExeFile)) =
UpperCase(ExeFileName)) or (UpperCase(FProcessEntry32.szExeFile) =
UpperCase(ExeFileName))) then
Result := Integer(TerminateProcess(
OpenProcess(PROCESS_TERMINATE,
BOOL(0),
FProcessEntry32.th32ProcessID),
0));
ContinueLoop := Process32Next(FSnapshotHandle, FProcessEntry32);
end;
CloseHandle(FSnapshotHandle);
end;

//提权
function TForm1.EnablePrivilege(hToken: Cardinal; PrivName: string; bEnable:
Boolean): Boolean;
var
TP: TOKEN_PRIVILEGES;
Dummy: Cardinal;
begin
TP.PrivilegeCount := 1;
LookupPrivilegevalue(nil, pchar(PrivName), TP.Privileges[0].Luid);
if bEnable then
TP.Privileges[0].Attributes := SE_PRIVILEGE_ENABLED
else
TP.Privileges[0].Attributes := 0;
AdjustTokenPrivileges(hToken, False, TP, SizeOf(TP), nil, Dummy);
Result := GetLastError = ERROR_SUCCESS;
end;  

procedure TForm1.Button1Click(Sender: TObject);
var
hToken: Cardinal;
begin

//若是服务进程,则需要将权限提升到debug,才能关闭
   EnablePrivilege(hToken, 'SeDebugPrivilege', True);
   KillTask('notepad');

end;

end.


使用的时候先EnableDebugPrivilege提升权限,然后KillTask(ExeFileName: string)

posted @ 2013-04-01 23:37  Wishmeluck  阅读(168)  评论(0编辑  收藏  举报