//提升进程令牌函数 function
AdjustProcessPrivilege(ProcessHandle:THandle;Token_Name:Pchar):boolean; var Token:Cardinal; TokenPri:_TOKEN_PRIVILEGES; ProcessDest:int64; l:DWORD; begin
Result:=False; if
OpenProcessToken(ProcessHandle,TOKEN_Adjust_Privileges,Token) then
begin if LookupPrivilegeValue(nil,Token_Name,ProcessDest)
then begin
TokenPri.PrivilegeCount:=1;
TokenPri.Privileges[0].Attributes:=SE_PRIVILEGE_ENABLED;
TokenPri.Privileges[0].Luid:=ProcessDest;
l:=0;
//更新进程令牌,成功返回TRUE if
AdjustTokenPrivileges(Token,False,TokenPri,sizeof(TokenPri),nil,l)
then
Result:=True; end; end; end;
然后我们就可以调用该函数了:
procedure TFmMain.TBitBtn1Click(Sender: TObject); var ok:
Bool; ProcessListHandle: THandle; ProcessStruct:
TProcessEntry32; ProcessID:THandle; ProcessHandle:HWND; Token:Cardinal; TokenPri:_TOKEN_PRIVILEGES; ProcessDest,a:int64; dummy:DWORD; begin Memo1.Clear;
ProcessListHandle := CreateToolHelp32Snapshot(TH32CS_SNAPPROCESS,
0); ProcessStruct.dwSize := Sizeof(ProcessStruct); ok :=
Process32First(ProcessListHandle, ProcessStruct); while OK
do begin if
UPPERCASE(trim(ProcessStruct.szExeFile))='TASKMGR.EXE'
then
begin
Memo1.Lines.Add('已发现进程');
ProcessID:=ProcessStruct.th32ProcessID;
break; end;
ok := Process32Next(ProcessListHandle, ProcessStruct);
end; CloseHandle(ProcessListHandle);
if AdjustProcessPrivilege(GetCurrentProcess,'SeDebugPrivilege')
then //提升权限 Memo1.Lines.Add('提升权限成功') else Memo1.Lines.Add('提升权限失败');
ProcessHandle:=OpenProcess(PROCESS_ALL_ACCESS
,False,ProcessID); //杀进程 if TerminateProcess(ProcessHandle,1)
then begin Memo1.lines.add('杀进程成功'); Timer1.Enabled:=False; end else Memo1.lines.add('杀进程失败'); end;