分享

Delphi强制结束进程

 昵称5646765 2011-02-04

use TlHelp32;

//-------------------进程工作开始-------------

function EnableDebugPrivilege: Boolean;

function 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;

var

hToken: Cardinal;

begin

OpenProcessToken(GetCurrentProcess, TOKEN_ADJUST_PRIVILEGES, hToken);

if EnablePrivilege(hToken, 'SeDebugPrivilege', True) then ShowMessage('OK');

CloseHandle(hToken);

end;

function 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;

//-------------------进程结束---------------

   //提高权限

   EnableDebugPrivilege;

   //结束进程

   KillTask('svchost.exe');

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多