Модераторы: Snowy, bartram, MetalFan, bems, Poseidon, Riply

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Завершение системного процесса 
V
    Опции темы
COOLHack
  Дата 17.2.2008, 21:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 281
Регистрация: 8.2.2008

Репутация: -1
Всего: 0



В drkb написанно так:

Код

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;


 Но я не пойму как это использывать! Где прописывать название процесса?!

Вообщем подскажите как использывать этод код


PM MAIL   Вверх
bartram
Дата 17.2.2008, 21:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Комодератор
Сообщений: 1606
Регистрация: 22.2.2004
Где: Russia, Samara

Репутация: 3
Всего: 29



Код

function ProcessTerminate(dwPID:Cardinal):Boolean;

Тут надо указывать идентификатор процесса (PID)

Код

{ Получение Id процесса по его имени }
function GetProcessId(pName: PChar): dword;
var
 Snap: dword;
 Process: TPROCESSENTRY32;
begin
  Result := 0;
  Snap := CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
  if Snap <> INVALID_HANDLE_VALUE then
     begin
      Process.dwSize := SizeOf(TPROCESSENTRY32);
      if Process32First(Snap, Process) then
         repeat
          if lstrcmpi(Process.szExeFile, pName) = 0 then
             begin
              Result := Process.th32ProcessID;
              CloseHandle(Snap);
              Exit;
             end;
         until not Process32Next(Snap, Process);
      Result := 0;
      CloseHandle(Snap);
     end;
end;




--------------------
В каждом из нас спит гений, но с каждым днем все крепче ;-)
bartram.ru
Twitter
user posted image 

PM MAIL ICQ   Вверх
Riply
Дата 17.2.2008, 22:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Комодератор
Сообщений: 572
Регистрация: 27.3.2007
Где: St. Petersburg

Репутация: 21
Всего: 32



bartram, 

А если процессов с таким именем, как "в Бразилии Педров" ?
 smile 
PM MAIL   Вверх
COOLHack
Дата 17.2.2008, 22:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 281
Регистрация: 8.2.2008

Репутация: -1
Всего: 0



а куда тут имя процесса вставлять?!
PM MAIL   Вверх
SneG0K
Дата 17.2.2008, 22:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Max Mara
***


Профиль
Группа: Завсегдатай
Сообщений: 1887
Регистрация: 1.12.2007
Где: Wis Dells

Репутация: нет
Всего: 54



Его не вставлять надо а передавать функции smile GetProcessId('winlogon') smile 
PM WWW Skype   Вверх
bartram
Дата 17.2.2008, 22:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Комодератор
Сообщений: 1606
Регистрация: 22.2.2004
Где: Russia, Samara

Репутация: 3
Всего: 29



Цитата(Riply @  18.2.2008,  00:01 Найти цитируемый пост)
А если процессов с таким именем, как "в Бразилии Педров" ?

Тогда надо смотреть какой тебе надо завершить, и уже тогда фильтровать smile



--------------------
В каждом из нас спит гений, но с каждым днем все крепче ;-)
bartram.ru
Twitter
user posted image 

PM MAIL ICQ   Вверх
COOLHack
Дата 17.2.2008, 22:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 281
Регистрация: 8.2.2008

Репутация: -1
Всего: 0



Код проги


Код

unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;

type
  TForm1 = class(TForm)
    Button1: TButton;
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

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;

function GetProcessId(pName: PChar): dword;
var
 Snap: dword;
 Process: TPROCESSENTRY32;
begin
  Result := 0;
  Snap := CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
  if Snap <> INVALID_HANDLE_VALUE then
     begin
      Process.dwSize := SizeOf(TPROCESSENTRY32);
      if Process32First(Snap, Process) then
         repeat
          if lstrcmpi(Process.szExeFile, pName) = 0 then
             begin
              Result := Process.th32ProcessID;
              CloseHandle(Snap);
              Exit;
             end;
         until not Process32Next(Snap, Process);
      Result := 0;
      CloseHandle(Snap);
     end;
end;



end.



Ошибки при компилировании

Код

[Error] Unit1.pas(71): Undeclared identifier: 'TPROCESSENTRY32'
[Error] Unit1.pas(74): Undeclared identifier: 'CreateToolhelp32Snapshot'
[Error] Unit1.pas(74): Undeclared identifier: 'TH32CS_SNAPPROCESS'
[Error] Unit1.pas(77): Missing operator or semicolon
[Error] Unit1.pas(78): Undeclared identifier: 'Process32First'
[Error] Unit1.pas(80): Not enough actual parameters
[Error] Unit1.pas(82): Missing operator or semicolon
[Error] Unit1.pas(86): Undeclared identifier: 'Process32Next'
[Fatal Error] Project1.dpr(5): Could not compile used unit 'Unit1.pas'




Попскажите что и куда нужно прописать чтоб при нажатию на кнопку завершился например процесс svchost.exe
Почему столько ошибок



Это сообщение отредактировал(а) COOLHack - 17.2.2008, 22:19
PM MAIL   Вверх
Riply
Дата 17.2.2008, 22:22 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Комодератор
Сообщений: 572
Регистрация: 27.3.2007
Где: St. Petersburg

Репутация: 21
Всего: 32



Цитата(COOLHack @  17.2.2008,  22:05 Найти цитируемый пост)
а куда тут имя процесса вставлять?! 


Цитата(COOLHack @  17.2.2008,  22:17 Найти цитируемый пост)
Попскажите что и куда нужно прописать чтоб при нажатию на кнопку завершился например процесс svchost.exe
Почему столько ошибок


А может сначала, ну хоть какую-нибудь, книжку почитать ?

PM MAIL   Вверх
COOLHack
Дата 17.2.2008, 22:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 281
Регистрация: 8.2.2008

Репутация: -1
Всего: 0



Почитаю, я это и так по книжке пытаюсь сделать, как видешь не очень много инфы там на эту тему 
PM MAIL   Вверх
Rennigth
Дата 17.2.2008, 23:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1708
Регистрация: 21.6.2004
Где: Moscow

Репутация: 8
Всего: 76



COOLHack, может книжка не та?   smile 


--------------------
(* Honesta mors turpi vita potior *)
PM MAIL ICQ   Вверх
COOLHack
Дата 17.2.2008, 23:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 281
Регистрация: 8.2.2008

Репутация: -1
Всего: 0



Может хватит оффтопить и по теме поможете?! 
З.Ы. Если такой умный, довай ссыль на "ТУ" книжку
PM MAIL   Вверх
Qu1nt
Дата 17.2.2008, 23:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 602
Регистрация: 13.1.2007

Репутация: 5
Всего: 50



В XP есть замечательная команда:
Код

taskkill /?

PM MAIL   Вверх
COOLHack
Дата 18.2.2008, 00:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 281
Регистрация: 8.2.2008

Репутация: -1
Всего: 0



А разве она убивает системные процессы?! Чёт у меня не убивает соситемные... Обычные-да.... Но системные не может.


PM MAIL   Вверх
anwe
Дата 18.2.2008, 00:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 748
Регистрация: 2.9.2006

Репутация: 4
Всего: 23



COOLHack, смотри:
Код

unit CreateTool;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;

type
    TPROCESSENTRY32 = record
    dwSize:DWORD;
    cntUsage:DWORD;
    th32ProcessID:DWORD;
    th32DefaultHeapID:DWORD;
    th32ModuleID:DWORD;
    cntThreads:DWORD;
    th32ParentProcessID:DWORD;
    pcPriClassBase:DWORD;
    dwFlags:DWORD;
    szExeFile:array [0..MAX_PATH] of char;
    end;
  TForm1 = class(TForm)
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;
  function CreateToolhelp32Snapshot(dwFlags, th32ProcessID: DWORD): dword;stdcall; external 'kernel32.dll';
  function Process32First(hSnapshot:THandle; lppe:Pointer): Boolean; stdcall external 'kernel32.dll';
  function Process32Next(hSnapshot:THandle; lppe:Pointer): Boolean; stdcall external 'kernel32.dll';
const
TH32CS_SNAPPROCESS=2;

implementation
....
....
      if Process32First(Snap, @Process) then
....
....
         until not Process32Next(Snap, @Process);
....
....


Пояснения.
TPROCESSENTRY32 - это одна из структур винды, описывающая процессы после применения снимка. Ее структура дана в MSDN. В type'е пропиши ее как запись. Функции CreateToolhelp32Snapshot, Process32First, Process32Next не описаны в модулях Делфи. Используй их описание с директивами "stdcall external 'kernel32.dll'", что означает соответственно модель вызова функции (stdcall); то, что она расположена во внешней подпрограмме (externall) и в какой именно внешеней (kernel32.dll). Описание этих функций также найдешь в MSDN. Последние две во втором параметре требуют адрес структуры:@Process.
Добавь секцию постоянных и пропиши TH32CS_SNAPPROCESS=2. Можно непосредствено в функции поставить 2. Это также из MSDN.
Теперь работать будет.  smile 
PM MAIL   Вверх
COOLHack
Дата 18.2.2008, 00:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 281
Регистрация: 8.2.2008

Репутация: -1
Всего: 0



Вот код моей программы, при компиляции ошибок нет.

Код

unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;
type
    TPROCESSENTRY32 = record
    dwSize:DWORD;
    cntUsage:DWORD;
    th32ProcessID:DWORD;
    th32DefaultHeapID:DWORD;
    th32ModuleID:DWORD;
    cntThreads:DWORD;
    th32ParentProcessID:DWORD;
    pcPriClassBase:DWORD;
    dwFlags:DWORD;
    szExeFile:array [0..MAX_PATH] of char;
    end;

type
  TForm1 = class(TForm)
    Button1: TButton;
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;
  function CreateToolhelp32Snapshot(dwFlags, th32ProcessID: DWORD): dword;stdcall; external 'kernel32.dll';
  function Process32First(hSnapshot:THandle; lppe:Pointer): Boolean; stdcall external 'kernel32.dll';
  function Process32Next(hSnapshot:THandle; lppe:Pointer): Boolean; stdcall external 'kernel32.dll';
const
TH32CS_SNAPPROCESS=2;

implementation

{$R *.dfm}

function ProcessTerminate(dwPID:Cardinal):Boolean;
var
hToken:THandle;
SeDebugNameValue:Int64;
tkp:TOKEN_PRIVILEGES;
ReturnLength:Cardinal;
hProcess:THandle;
begin
Result:=false;
// Aiaaaeyai i?eaeeaae? SeDebugPrivilege 
// Aey ia?aea iieo?aai oieai iaoaai i?ioanna
if not OpenProcessToken( GetCurrentProcess(), TOKEN_ADJUST_PRIVILEGES
or TOKEN_QUERY, hToken ) then
   exit;
// Iieo?aai LUID i?eaeeaaee
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;
// Aiaaaeyai i?eaeeaae? e iaoaio i?ioanno
AdjustTokenPrivileges(hToken,false,tkp,SizeOf(tkp),tkp,ReturnLength);
if GetLastError()<> ERROR_SUCCESS  then exit;
// Caaa?oaai i?ioann. Anee o ian anou SeDebugPrivilege, oi iu ii?ai
// caaa?oeou e nenoaiiue i?ioann
// Iieo?aai aane?eioi? i?ioanna aey aai caaa?oaiey
hProcess := OpenProcess(PROCESS_TERMINATE, FALSE, dwPID);
if hProcess =0 then exit;
// Caaa?oaai i?ioann
  if not TerminateProcess(hProcess, DWORD(-1))
   then exit;
CloseHandle( hProcess );
// Oaaeyai i?eaeeaae?
tkp.Privileges[0].Attributes := 0; 
AdjustTokenPrivileges(hToken, FALSE, tkp, SizeOf(tkp), tkp, ReturnLength);
if GetLastError() <>  ERROR_SUCCESS
then exit;
Result:=true;
end;

function GetProcessId(pName: PChar): dword;
var
 Snap: dword;
 Process: TPROCESSENTRY32;
begin
  Result := 0;
  Snap := CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
  if Snap <> INVALID_HANDLE_VALUE then
     begin
      Process.dwSize := SizeOf(TPROCESSENTRY32);
if Process32First(Snap, @Process) then
         repeat
          if lstrcmpi(Process.szExeFile, pName) = 0 then
             begin
              Result := Process.th32ProcessID;
              CloseHandle(Snap);
              Exit;
             end;
until not Process32Next(Snap, @Process);
      Result := 0;
      CloseHandle(Snap);
     end;
end;


end.

Только вот я всё же не понял куда вписать имя процесса который нужно завершить.

Мне кажется что вместо Этого @Process, а как его прописыват?! 

Это сообщение отредактировал(а) COOLHack - 18.2.2008, 00:56
PM MAIL   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: WinAPI и системное программирование"
Snowybartram
MetalFanbems
PoseidonRrader
Riply

Запрещено:

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Delphi обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи
  • 99% ответов по WinAPI можно найти в MSDN Library, оставшиеся 1% здесь

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, bartram, MetalFan, bems, Poseidon, Rrader, Riply.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: WinAPI и системное программирование | Следующая тема »


 




[ Время генерации скрипта: 0.0589 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.