Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Как завершить системныЙ процесс? [D6, WinXP]


Handle ©   (2006-03-03 18:31:00) 

Как завершить системныЙ процесс?
Например получаю я список процессов.

var
hSnapShot:     THandle;
uProcess:      PROCESSENTRY32;
r:             longbool;
begin
hSnapShot:=CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0);
uProcess.dwSize := Sizeof(uProcess);
if(hSnapShot<>0)then
begin
r:=Process32First(hSnapShot, uProcess);
while r <> false do
begin
ListBox1.Items.Add(uProcess.szExeFile);
r:=Process32Next(hSnapShot, uProcess);
end;
CloseHandle(hSnapShot);
end;


Обычные процессы функция TerminateProcess убивает, а системные не может.
Как же завершить например winlogon.exe.
Заранее благодарен.Спасибо.


kaZaNoVa   (2006-03-05 16:51:00) [1]

Saygak ©   (05.03.06 16:45) [5]
uses
Tlhelp32;


Handle   (2006-03-05 16:50:00) [2]


> Saygak ©   (05.03.06 16:45) [5]
> а где описаны используемые функции


PsAPI, Shellapi , ToolWin, TLHelp32


Saygak   (2006-03-05 16:45:00) [3]

А можно попутный вопрос?
var
hSnapShot:     THandle;
uProcess:      PROCESSENTRY32;
r:             longbool;
begin
hSnapShot:=CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0);
uProcess.dwSize := Sizeof(uProcess);
if(hSnapShot<>0)then
begin
r:=Process32First(hSnapShot, uProcess);
while r <> false do
begin
ListBox1.Items.Add(uProcess.szExeFile);
r:=Process32Next(hSnapShot, uProcess);
end;
CloseHandle(hSnapShot);
end;

а где описаны используемые функции


Handle   (2006-03-05 11:50:00) [4]


> kaZaNoVa ©   (05.03.06 09:53) [3]

Спасибо буду разбираться.


kaZaNoVa   (2006-03-05 09:53:00) [5]

и про права админа не забудь)))


kaZaNoVa   (2006-03-05 09:43:00) [6]

function SetDebugPriv: Boolean;
var
Token: THandle;
tkp: TTokenPrivileges;
begin
Result := false;
if OpenProcessToken(GetCurrentProcess(),TOKEN_ADJUST_PRIVILEGES or TOKEN_QUERY, Token) then
begin
 if LookupPrivilegeValue(nil, PChar('SeDebugPrivilege'), tkp.Privileges[0].Luid) then
 begin
   tkp.PrivilegeCount := 1;
   tkp.Privileges[0].Attributes := SE_PRIVILEGE_ENABLED;
   Result := AdjustTokenPrivileges(Token, false, tkp, 0, PTokenPrivileges(nil)^, PDWord(nil)^);
 end;
end;
end;


kaZaNoVa   (2006-03-05 08:56:00) [7]

Handle   (03.03.06 19:03)
Как же завершить например winlogon.exe.

система рухнет. сразу.

- привелегии получи и всё .. если надо - есть пример ..


Наверх

Титульная страница Поиск, карта сайта Написать письмо