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

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

Фильтрация процессов от системных [D5, D6, D7, Win2k, WinXP]


Aragon ©   (2006-06-18 19:31:00) 

Hi! Подскажите, как можно узнать является ли процесс системным. Делал так: получаю все аткивные процессы в системе, если от процесса можно получить какую-нибудь инфу, то простой процесс, иначе возникнет ошибка доступа - системный. svchost, lsass, services и т.д. проходят такой фильтр.
По папке System32 тоже нехорошо, т.к. пользователь может от туда стартовать свое приложение.
Как реализовать фильтр от системных процессов.


Игорь Шевченко   (2006-06-19 10:22:00) [1]


> Подскажите, как можно узнать является ли процесс системным


type
 ZString = array[0..1024] of char;

function SIDToName (const SID: PSID): string;
var
 Use : SID_NAME_USE;
 DomainName : ZString;
 DomainNameLength : DWORD;
 Name : ZString;
 NameLength : DWORD;
begin
 if not LookupAccountSid(nil, SID, Name, NameLength, DomainName,
    DomainNameLength, Use) then
   Result := '***'
 else
   Result := Name;
end;


procedure TfMain.LookupProcessOwner(AProcess: THSNtProcessInfo);
var
 UserName: string;
 AccessToken : THandle;
 Info : PSIDANDATTRIBUTES;
 ReturnLength : DWORD;
 ProcessHandle: THandle;
begin
 ProcessHandle := OpenProcess(PROCESS_QUERY_INFORMATION, false,
    AProcess.Info.ProcessId);
 if ProcessHandle = 0 then
   Exit;
 try
   if not OpenProcessToken(ProcessHandle, TOKEN_QUERY, AccessToken) then
     Exit;
   GetMem (Info, 4096);
   try
     Win32Check(GetTokenInformation(AccessToken, TokenUser, Info, 4096,
       ReturnLength));
     UserName := SidToName(Info^.Sid);
   finally
     FreeMem(Info);
     CloseHandle(AccessToken);
   end;
 finally
   CloseHandle(ProcessHandle);
 end;
....
end;


По username и фильтровать


Сергей М.   (2006-06-19 08:36:00) [2]


> если от процесса можно получить какую-нибудь инфу


Это как ?


Наверх

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