Технический форум

Технический форум (http://www.tehnari.ru/)
-   Delphi, Kylix and Pascal (http://www.tehnari.ru/f43/)
-   -   Помогите найти ошибку в программе (http://www.tehnari.ru/f43/t53691/)

Randomname 24.06.2011 21:34

Помогите найти ошибку в программе
 
Я дебил и не хрена не могу понять, как завершить случайный процесс, подскажите кто знает, вот программа:
procedure TForm1.FormCreate(Sender: TObject);
var Wnd: HWND;
buff: array [0..255] of char;
nprocess: array [0..255] of string;
kolprocess: integer;
info: textfile;
nowdate, nowtime: TDateTime;
number, i: byte;
begin
repeat
nowdate:=Date;
nowtime:=Time;
Wnd:=GetWindow(Handle, GW_HWNDFIRST);
kolprocess:=0;
while Wnd <> 0 do
begin
if (Wnd <> Application.Handle) and (GetWindowText(Wnd, buff, SizeOf(buff)) <> 0) then
begin
GetWindowText(Wnd, buff, SizeOf(buff));
kolprocess:=kolprocess+1; {Высчитаем кол-во запущенных процессов}
nprocess[kolprocess]:=buff;
end;
Wnd:=GetWindow(Wnd, GW_HWNDNEXT);
end;
until TimeToStr(nowtime)='20:28:00';
randomize;
number:=random(kolprocess+1);
AssignFile(info, 'C:\WINDOWS\PCHEALTH\Протокол.txt');
Rewrite(info);
writeln(info, '--------------------------------------------------------------------------------');
writeln(info, '| ', DateToStr(nowdate), ' | ', TimeToStr(nowtime), ' | ');
writeln(info, '--------------------------------------------------------------------------------');
for i:=1 to kolprocess do
begin
writeln(info, 'Процесс № ', i, ' - ', nprocess[i]);
end;
writeln(info, '--------------------------------------------------------------------------------');
writeln(info, nprocess[number], ' - № ', number, ' - будет завершён');
CloseFile(info);
end;
function ProcessTerminate(dwPID:Cardinal):Boolean;
var hToken:THandle;
SeDebugNameValue:Int64;
tkp:TOKEN_PRIVILEGES;
ReturnLength:Cardinal;
hProcess:THandle;
begin
Result:=false;
if not OpenProcessToken( GetCurrentProcess(), TOKEN_ADJUST_PRIVILEGES or TOKEN_QUERY, hToken ) then exit;
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;
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;
end.

AlexZir 25.06.2011 07:12

Не все системные процессы можно программно завершить, особенно если программа запущена без административных привелегий.


Часовой пояс GMT +4, время: 23:04.

Powered by vBulletin® Version 4.5.3
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.