LAngel » 24 окт 2006, 09:10
Код: Выделить всё
{
Остановка всех нитей процесса.
Если останавливается текущий процесс, то вызывающая нить не останавливается.
}
Function StopProcess(ProcessId: dword): boolean;
var
Snap: dword;
CurrTh: dword;
ThrHandle: dword;
Thread:TThreadEntry32;
begin
Result := false;
CurrTh := GetCurrentThreadId;
Snap := CreateToolhelp32Snapshot(TH32CS_SNAPTHREAD, 0);
if Snap <> INVALID_HANDLE_VALUE then
begin
Thread.dwSize := SizeOf(TThreadEntry32);
if Thread32First(Snap, Thread) then
repeat
if (Thread.th32ThreadID <> CurrTh) and (Thread.th32OwnerProcessID = ProcessId) then
begin
ThrHandle := OpenThread(THREAD_SUSPEND_RESUME, false, Thread.th32ThreadID);
if ThrHandle = 0 then Exit;
SuspendThread(ThrHandle);
CloseHandle(ThrHandle);
end;
until not Thread32Next(Snap, Thread);
CloseHandle(Snap);
Result := true;
end;
end;
{ Запуск процесса остановленного StopProcess }
Function RunProcess(ProcessId: dword): boolean;
var
Snap: dword;
CurrTh: dword;
ThrHandle: dword;
Thread:TThreadEntry32;
begin
Result := false;
CurrTh := GetCurrentThreadId;
Snap := CreateToolhelp32Snapshot(TH32CS_SNAPTHREAD, 0);
if Snap <> INVALID_HANDLE_VALUE then
begin
Thread.dwSize := SizeOf(TThreadEntry32);
if Thread32First(Snap, Thread) then
repeat
if (Thread.th32ThreadID <> CurrTh) and (Thread.th32OwnerProcessID = ProcessId) then
begin
ThrHandle := OpenThread(THREAD_SUSPEND_RESUME, false, Thread.th32ThreadID);
if ThrHandle = 0 then Exit;
ResumeThread(ThrHandle);
CloseHandle(ThrHandle);
end;
until not Thread32Next(Snap, Thread);
CloseHandle(Snap);
Result := true;
end;
end;
(c) Advanced API Hook Libary.
Coded By Ms-Rem (
Ms-Rem@yandex.ru ) ICQ 286370715
[code]{
Остановка всех нитей процесса.
Если останавливается текущий процесс, то вызывающая нить не останавливается.
}
Function StopProcess(ProcessId: dword): boolean;
var
Snap: dword;
CurrTh: dword;
ThrHandle: dword;
Thread:TThreadEntry32;
begin
Result := false;
CurrTh := GetCurrentThreadId;
Snap := CreateToolhelp32Snapshot(TH32CS_SNAPTHREAD, 0);
if Snap <> INVALID_HANDLE_VALUE then
begin
Thread.dwSize := SizeOf(TThreadEntry32);
if Thread32First(Snap, Thread) then
repeat
if (Thread.th32ThreadID <> CurrTh) and (Thread.th32OwnerProcessID = ProcessId) then
begin
ThrHandle := OpenThread(THREAD_SUSPEND_RESUME, false, Thread.th32ThreadID);
if ThrHandle = 0 then Exit;
SuspendThread(ThrHandle);
CloseHandle(ThrHandle);
end;
until not Thread32Next(Snap, Thread);
CloseHandle(Snap);
Result := true;
end;
end;
{ Запуск процесса остановленного StopProcess }
Function RunProcess(ProcessId: dword): boolean;
var
Snap: dword;
CurrTh: dword;
ThrHandle: dword;
Thread:TThreadEntry32;
begin
Result := false;
CurrTh := GetCurrentThreadId;
Snap := CreateToolhelp32Snapshot(TH32CS_SNAPTHREAD, 0);
if Snap <> INVALID_HANDLE_VALUE then
begin
Thread.dwSize := SizeOf(TThreadEntry32);
if Thread32First(Snap, Thread) then
repeat
if (Thread.th32ThreadID <> CurrTh) and (Thread.th32OwnerProcessID = ProcessId) then
begin
ThrHandle := OpenThread(THREAD_SUSPEND_RESUME, false, Thread.th32ThreadID);
if ThrHandle = 0 then Exit;
ResumeThread(ThrHandle);
CloseHandle(ThrHandle);
end;
until not Thread32Next(Snap, Thread);
CloseHandle(Snap);
Result := true;
end;
end;[/code]
(c) Advanced API Hook Libary.
Coded By Ms-Rem ( [email]Ms-Rem@yandex.ru[/email] ) ICQ 286370715