IPB
ЛогинПароль:

> ВНИМАНИЕ!

Прежде чем задать вопрос, смотрите FAQ.
Рекомендуем загрузить DRKB.

Наладить общение поможет, если вы подпишитесь по почте на новые темы в этом форуме.

 
 Ответить  Открыть новую тему 
> Завершение процесса, Как завершить процесс???
сообщение
Сообщение #1


Новичок
*

Группа: Пользователи
Сообщений: 34
Пол: Мужской

Репутация: -  -1  +


Чуваки, а как завершить процесс из моей проги, например svchost.exe???


--------------------
@13][ P.$.
www.alex-ps.com
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #2


Новичок
*

Группа: Пользователи
Сообщений: 29
Пол: Мужской

Репутация: -  -1  +


Легко и просто. Открываешь его с правом на Terminate и именно это с ним производишь.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #3


N337
****

Группа: Пользователи
Сообщений: 737
Пол: Мужской

Репутация: -  26  +


В общем виде задача решается с помощью функции TerminateProccess. При вызове ей необходимо указать логический номер (handle), возвращаемый функцией OpenProcess. Последней требуется идентификатор процесса, способы определения которого варьируются для различных реализаций Win32 API (имеется в виду случай, когда нужно завершить процесс, созданный другим приложением).

Вот пример функции, возвращающей идентификатор процесса по имени файла образа:
uses
 Windows, Messages, tlhelp32, psapi, SysUtils;

// Get id of a process
function LocateProcess(const ImageName: String): Integer;
var
 Snapshot,
 ProcessHandle,
 ModuleHandle,
 i: Integer;
 BytesRead: Cardinal;
 ProcessEntry: TProcessEntry32;
 ExeFile: String;
 PIDs: array[0..4095] of DWord;
begin
 Result := 0;
 Snapshot := CreateToolHelp32Snapshot(TH32CS_SNAPPROCESS, 0);
 SetLength(ExeFile, Length(ImageName));
 if Snapshot <> 0 then
   begin
     // Processes enumeration loop for Windows 9x, Me, 2000
     // ToolHelp32 API
     ProcessEntry.dwSize := SizeOf(TProcessEntry32);
     if Process32First(Snapshot, ProcessEntry) then
       repeat
         if AnsiSameText(ImageName, ExtractFileName(ProcessEntry.szExeFile)) then
           begin
             Result := ProcessEntry.th32ProcessID;
             Break;
           end;
       until not Process32Next(Snapshot, ProcessEntry);
     CloseHandle(Snapshot);
   end
 else
   // Processes enumeration loop for Windows NT, 2000 PSAPI
   if EnumProcesses(@PIDs, SizeOf(PIDs), BytesRead) then
     begin
       for i := 0 to BytesRead shr 2 - 1 do
         begin
           ProcessHandle := OpenProcess(PROCESS_VM_READ or
             PROCESS_QUERY_INFORMATION, False, PIDs[i]);
           if ProcessHandle <> 0 then
             begin
               ExeFile := '';
               if EnumProcessModules(ProcessHandle, @ModuleHandle,
                    SizeOf(ModuleHandle), BytesRead) then
                 GetModuleBaseName(ProcessHandle, ModuleHandle, PChar(ExeFile),
                   Length(ExeFile) + 1);
               CloseHandle(ProcessHandle);
               if AnsiSameText(ImageName, ExeFile) then
                 begin
                   Result := PIDs[i];
                   Break;
                 end;
             end; // then
         end; // for
     end; // then
end;


--------------------
The idiots are winning.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 





- Текстовая версия 16.05.2024 0:31
500Gb HDD, 6Gb RAM, 2 Cores, 7 EUR в месяц — такие хостинги правда бывают
Связь с администрацией: bu_gen в домене octagram.name