Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Низкоуровневое программирование > Win Api
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 15.06.2007, 22:33   #1
Andr
Пользователь
 
Аватар для Andr
 
Регистрация: 11.04.2007
Сообщений: 75
По умолчанию Системный процесс

Как завершить системный процесс не программным путем (вручную)?
Друг написал прогу. которая создает процесс одноименный с системным, хочу его как-то закрыть. Помогите плз.
Andr вне форума Ответить с цитированием
Старый 15.06.2007, 23:34   #2
Alex21
With best regards
Участник клуба
 
Регистрация: 20.04.2007
Сообщений: 1,448
По умолчанию

В чем проблема???

3 волшебные кнопки тебе помогут: Ctrl+Alt+Del->закладка ПРОЦЕССЫ-> выбираешь процесс и закрыть.

Если не можешь отличить, тогда Выполни (Win+R): "msconfig" (без кавычек), закладка автозагрузка сними флажок с этой проги.

А если все совсем плохо: есть прога procexp, показывает много всего о процессе (разработчик, подгружаемые либры, и проч.), ей точно выследишь левый процесс.
Alex21 вне форума Ответить с цитированием
Старый 16.06.2007, 08:40   #3
rpy3uH
добрый няша
Старожил
 
Аватар для rpy3uH
 
Регистрация: 29.10.2006
Сообщений: 4,804
По умолчанию

Цитата:
Сообщение от Andr Посмотреть сообщение
Друг написал прогу. которая создает процесс одноименный с системным
а какой процесс то?
rpy3uH вне форума Ответить с цитированием
Старый 16.06.2007, 13:14   #4
Andr
Пользователь
 
Аватар для Andr
 
Регистрация: 11.04.2007
Сообщений: 75
По умолчанию

Грузину lsass.exe
Andr вне форума Ответить с цитированием
Старый 16.06.2007, 22:59   #5
Alex21
With best regards
Участник клуба
 
Регистрация: 20.04.2007
Сообщений: 1,448
По умолчанию

Посмотри в диспетчере задач закладка процессы какое имя пользователя? Если SYSTEM, то нетрогай а если твоя учетная запись - тогда завершай его.
Alex21 вне форума Ответить с цитированием
Старый 17.06.2007, 11:53   #6
Andr
Пользователь
 
Аватар для Andr
 
Регистрация: 11.04.2007
Сообщений: 75
По умолчанию

В том то и все дело, что учетная запись. А когда жму завершить, пишется, что это критический системный процесс.
Andr вне форума Ответить с цитированием
Старый 17.06.2007, 16:12   #7
rpy3uH
добрый няша
Старожил
 
Аватар для rpy3uH
 
Регистрация: 29.10.2006
Сообщений: 4,804
По умолчанию

Цитата:
Сообщение от Andr Посмотреть сообщение
Грузину lsass.exe
его завершать не надо! от его существования зависит существование системы. попробуй его завершить через ProcessExplorer и посмотри что будет. та же самая история c Winlogon, smss, services, csrss
rpy3uH вне форума Ответить с цитированием
Старый 18.06.2007, 10:56   #8
Rouse_
Пользователь
 
Аватар для Rouse_
 
Регистрация: 31.05.2007
Сообщений: 56
По умолчанию

Оригинальный lsass.exe запускается из под winlogon-а. Твоему другу придется приложить определенное кол-во улисий чтобы произвети запуск оттуда-же. Построй дерево процессов, посмотри какой процесс откуда запущен. Если увидишь что Winlogon, smss, services, csrss запущены из под explorer.exe - можешь смело их тушить.
обычно дерево выглядит так.
System стартует smss. smss инициирует csrss и winlogon.
winlogon запускает lsass и services, все остальное системное прерогатива services. Строить дерево можно примерно вот таким кодом:
Vae Victis
(Горе побежденным (лат.))
Демки с открытым кодом:
http://rouse.drkb.ru
Rouse_ вне форума Ответить с цитированием
Старый 18.06.2007, 10:56   #9
Rouse_
Пользователь
 
Аватар для Rouse_
 
Регистрация: 31.05.2007
Сообщений: 56
По умолчанию

Код:
 
////////////////////////////////////////////////////////////////////////////////
//
//  ****************************************************************************
//  * Project   : ProcessTree
//  * Unit Name : uMain
//  * Purpose   : Демо построения дерева процессов
//  * Author    : Александр (Rouse_) Багель
//  * Version   : 1.00
//  * Home Page : http://rouse.drkb.ru
//  ****************************************************************************
//
 
unit uMain;
 
interface
 
uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms,
  Dialogs, ComCtrls;
 
type
 
  TfrmProcess = class(TForm)
    tvProcess: TTreeView;
    procedure FormCreate(Sender: TObject);
  private
    procedure AddProcess(const ID, ParentID: DWORD;
      const Description: String);
    procedure GetProcTree;
  end;
 
  PSYSTEM_THREADS = ^SYSTEM_THREADS;
  SYSTEM_THREADS  = packed record
    KernelTime: LARGE_INTEGER;
    UserTime: LARGE_INTEGER;
    CreateTime: LARGE_INTEGER;
    WaitTime: ULONG;
    StartAddress: Pointer;
    UniqueProcess: DWORD;
    UniqueThread: DWORD;
    Priority: Integer;
    BasePriority: Integer;
    ContextSwitchCount: ULONG;
    State: Longint;
    WaitReason: Longint;
  end;
 
  PSYSTEM_PROCESS_INFORMATION = ^SYSTEM_PROCESS_INFORMATION;
  SYSTEM_PROCESS_INFORMATION = packed record
    NextOffset: ULONG;
    ThreadCount: ULONG;
    Reserved1: array [0..5] of ULONG; // Что такое, пока не понятно...
    CreateTime: FILETIME;
    UserTime: FILETIME;
    KernelTime: FILETIME;
    ModuleNameLength: WORD;
    ModuleNameMaxLength: WORD;
    ModuleName: PWideChar;
    BasePriority: ULONG;
    ProcessID: ULONG;
    InheritedFromUniqueProcessID: ULONG;
    HandleCount: ULONG;
    Reserved2 : array[0..1] of ULONG; // Что такое, пока не понятно...
    PeakVirtualSize : ULONG;
    VirtualSize : ULONG;
    PageFaultCount : ULONG;
    PeakWorkingSetSize : ULONG;
    WorkingSetSize : ULONG;
    QuotaPeakPagedPoolUsage : ULONG;
    QuotaPagedPoolUsage : ULONG;
    QuotaPeakNonPagedPoolUsage : ULONG;
    QuotaNonPagedPoolUsage : ULONG;
    PageFileUsage : ULONG;
    PeakPageFileUsage : ULONG;
    PrivatePageCount : ULONG;
    ReadOperationCount : LARGE_INTEGER;
    WriteOperationCount : LARGE_INTEGER;
    OtherOperationCount : LARGE_INTEGER;
    ReadTransferCount : LARGE_INTEGER;
    WriteTransferCount : LARGE_INTEGER;
    OtherTransferCount : LARGE_INTEGER;
    ThreadInfo: array [0..0] of SYSTEM_THREADS;
  end;
 
  function NtQuerySystemInformation(
    SystemInformationClass: DWORD;   // тип требуемой информации
    SystemInformation : Pointer;     // указатель на буфер, в который вернется информация
    SystemInformationLength : DWORD; // размер буфера в байтах
    var ReturnLength: DWORD          // сколько байт было возвращено или требуется
    ): DWORD; stdcall; external 'ntdll.dll';
 
const
  SystemProcessesAndThreadsInformation = 5;
  STATUS_INFO_LENGTH_MISMATCH = $C0000004;
 
var
  frmProcess: TfrmProcess;
 
implementation
 
{$R *.dfm}
 
{ TForm2 }
 
procedure TfrmProcess.AddProcess(const ID, ParentID: DWORD;
  const Description: String);
var
  I: Integer;
  Node: TTreeNode;
begin
  Node := nil;
  for I := 0 to tvProcess.Items.Count - 1 do
    if DWORD(tvProcess.Items.Item[i].Data) = ParentID then
    begin
      Node := tvProcess.Items.Item[i];
      Break;
    end;
  Node := tvProcess.Items.AddChildFirst(Node, Description);
  Node.Data := Pointer(ID);
end;
 
procedure TfrmProcess.FormCreate(Sender: TObject);
begin
  GetProcTree;
end;
procedure TfrmProcess.GetProcTree;
var
  SystemInformation, SystemInformationIterator: PSYSTEM_PROCESS_INFORMATION;
  ReturnLength: DWORD;
  ModuleName: String;
begin
  ReturnLength := 0;
  if NtQuerySystemInformation(
    SystemProcessesAndThreadsInformation,
    nil, 0, ReturnLength) <> STATUS_INFO_LENGTH_MISMATCH then Exit;
  if ReturnLength > 0 then
  begin
    GetMem(SystemInformation, ReturnLength);
    try
      if NtQuerySystemInformation(SystemProcessesAndThreadsInformation,
        SystemInformation, ReturnLength, ReturnLength) = 0 then
      begin
        SystemInformationIterator := SystemInformation;
        repeat
          if SystemInformationIterator^.ModuleName = nil then
            ModuleName := 'System Idle Process'
          else
            ModuleName := SystemInformationIterator^.ModuleName;
          AddProcess(SystemInformationIterator^.ProcessID,
            SystemInformationIterator^.InheritedFromUniqueProcessID,
            ModuleName);
          SystemInformationIterator :=
            Pointer(DWORD(SystemInformationIterator) +
            SystemInformationIterator^.NextOffset);
        until SystemInformationIterator^.NextOffset = 0;
      end;
    finally
      FreeMem(SystemInformation);
    end;
  end;
end;
end.
Vae Victis
(Горе побежденным (лат.))
Демки с открытым кодом:
http://rouse.drkb.ru
Rouse_ вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Процесс ryton Операционные системы общие вопросы 5 28.05.2008 18:14
Процесс компилирования bill Общие вопросы Delphi 7 09.03.2008 14:22
Критический процесс UnD)eaD)Snake Безопасность, Шифрование 10 17.10.2007 11:19
Остановить процесс Shurik Hacker Win Api 4 20.07.2007 08:05