![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Фильтрация процессов от системных [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]
> если от процесса можно получить какую-нибудь инфу
Это как ?