Dmitri Arekhta (Daemon)
4/22/2005 1:54:00 PM
>> TerminateProcess()
> óÔÒÁÛÎÁÑ ×ÅÝØ. :-D ìÕÞÛÅ ÓÎÁÞÁÌÁ ÐÏÐÒÏÂÏ×ÁÔØ ÞÔÏ-ÔÏ ÍÅÎÅÅ ÒÁÄÉËÁÌØÎÏÅ --
> WM_QUIT, WM_CLOSE, ...
äÁ ÌÁÄÎÏ, ÌÕÞÛÅ ÚÄÅÌÁÔØ ÔÁË :D
// ÷ËÌÀÞÅÎÉÅ, ÐÒÉÍÉÎÅÎÉÅ É ÏÔËÌÀÞÅÎÉÑ ÐÒÉ×ÉÌÅÇÉÉ.
// äÌÑ ÐÒÉÍÅÒÁ ×ÏÚØÍÅÍ ÐÒÉ×ÉÌÅÇÉÀ ÏÔÌÁÄËÉ ÐÒÉÌÏÖÅÎÉÊ 'SeDebugPrivilege'
// ÎÅÏÂÈÏÄÉÍÕÀ ÄÌÑ ÚÁ×ÅÒÛÅÎÉÑ ìàâùè ÐÒÏÃÅÓÓÏ× × ÓÉÓÔÅÍÅ (ÚÁ×ÅÒÛÅÎÉÅ
ÐÒÏÃÅÓÏ×
// ÓÏÚÄÁÎÎÙÈ ÔÅËÕÝÉÍ ÐÏÌØÚÏ×ÁÔÅÌÅÍ ÐÒÉ×ÉÌÅÇÉÑ ÎÅ ÎÕÖÎÁ.
function ProcessTerminate(dwPID:Cardinal):Boolean;
var
hToken:THandle;
SeDebugNameValue:Int64;
tkp:TOKEN_PRIVILEGES;
ReturnLength:Cardinal;
hProcess:THandle;
begin
Result:=false;
// äÏÂÁ×ÌÑÅÍ ÐÒÉ×ÉÌÅÇÉÀ SeDebugPrivilege
// äÌÑ ÎÁÞÁÌÁ ÐÏÌÕÞÁÅÍ ÔÏËÅÎ ÎÁÛÅÇÏ ÐÒÏÃÅÓÓÁ
if not OpenProcessToken( GetCurrentProcess(), TOKEN_ADJUST_PRIVILEGES
or TOKEN_QUERY, hToken ) then
exit;
// ðÏÌÕÞÁÅÍ LUID ÐÒÉ×ÉÌÅÇÉÉ
if not LookupPrivilegeValue( nil, 'SeDebugPrivilege', SeDebugNameValue )
then begin
CloseHandle(hToken);
exit;
end;
tkp.PrivilegeCount:= 1;
tkp.Privileges[0].Luid := SeDebugNameValue;
tkp.Privileges[0].Attributes := SE_PRIVILEGE_ENABLED;
// äÏÂÁ×ÌÑÅÍ ÐÒÉ×ÉÌÅÇÉÀ Ë ÎÁÛÅÍÕ ÐÒÏÃÅÓÓÕ
AdjustTokenPrivileges(hToken,false,tkp,SizeOf(tkp),tkp,ReturnLength);
if GetLastError()< > ERROR_SUCCESS then exit;
// úÁ×ÅÒÛÁÅÍ ÐÒÏÃÅÓÓ. åÓÌÉ Õ ÎÁÓ ÅÓÔØ SeDebugPrivilege, ÔÏ ÍÙ ÍÏÖÅÍ
// ÚÁ×ÅÒÛÉÔØ É ÓÉÓÔÅÍÎÙÊ ÐÒÏÃÅÓÓ
// ðÏÌÕÞÁÅÍ ÄÅÓËÒÉÐÔÏÒ ÐÒÏÃÅÓÓÁ ÄÌÑ ÅÇÏ ÚÁ×ÅÒÛÅÎÉÑ
hProcess := OpenProcess(PROCESS_TERMINATE, FALSE, dwPID);
if hProcess =0 then exit;
// úÁ×ÅÒÛÁÅÍ ÐÒÏÃÅÓÓ
if not TerminateProcess(hProcess, DWORD(-1))
then exit;
CloseHandle( hProcess );
// õÄÁÌÑÅÍ ÐÒÉ×ÉÌÅÇÉÀ
tkp.Privileges[0].Attributes := 0;
AdjustTokenPrivileges(hToken, FALSE, tkp, SizeOf(tkp), tkp, ReturnLength);
if GetLastError() < > ERROR_SUCCESS
then exit;
Result:=true;
end;
// îÁÚ×ÁÎÉÅ ÄÏÂÁ×ÌÅÎÉÅ/ÕÄÁÌÅÎÉÅ ÐÒÉ×ÉÌÇÉÉ ÎÅÍÎÏÇÏ ÎÅÐÒÁ×ÉÌØÎÙÅ. ðÒÉ×ÉÌÅÇÉÑ
ÉÌÉ
// ÅÓÔØ × ÔÏËÅÎÅ ÐÒÏÃÅÓÓÁ ÉÌÉ ÅÅ ÎÅÔ. åÓÌÉ ÐÒÉ×ÉÌÅÇÉÑ ÅÓÔØ, ÔÏ ÏÎÁ ÍÏÖÅÔ
ÂÙÔØ ×
// Ä×ÕÈ ÓÏÓÔÏÑÎÉÑÈ - ÉÌÉ ×ËÌÀÞÅÎÁÑ ÉÌÉ ÏÔËÌÀÞÅÎÁÑ. é × ÜÔÏÍ ÐÒÉÍÅÒÅ ÍÙ
ÔÏÌØËÏ
// ×ËÌÀÞÁÅÍ ÉÌÉ ×ÙËÌÀÞÁÅÍ ÎÅÏÂÈÏÄÉÍÕÀ ÐÒÉ×ÉÌÅÇÉÀ, Á ÎÅ ÄÏÂÁ×ÌÑÅÍ ÅÅ.
PS á ×ÏÏÂÝÅ Á×ÔÏÒ ÔÒÉÄÁ ÂÙ ÓËÁÚÁÌ ËÁË ÏÎ Ó ×ÏÒÄÏÍ ÒÁÂÏÔÁÅÔ.