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

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

Опознать процесс ! [D6, WinXP]


psa247 ©   (2005-08-03 10:19:00) 

Как, если это возможно, с помощью WinApi отличить процесс Windows(MicroSoft) от остальных?


Игорь Шевченко   (2005-08-03 16:15:00) [1]

psa247 ©   (03.08.05 16:00) [10]

Конечно съедает, так как освобождения там не предусмотрено. Собственно, это просто пример использования, а не готовая программа.


Джо   (2005-08-03 16:04:00) [2]

Читай информацию VERSION_INFO из модуля. В разделе "копирайт" ищи Microsoft. Возможно, этого будет достаточно для "грязного" метода.


psa247   (2005-08-03 16:00:00) [3]

Насчет родства - не так выразился. Игорь, обратите внимание на процедуру GatherData из http://www.schevchenko.net.ru/SRC/QuerySystemInformation_60.zip
При частом обращении - съедает память, ошибку пока не нашел


Игорь Шевченко   (2005-08-03 14:04:00) [4]


> Можно ли отобразить только "родные" Windows-кие процессы?


Чем определяется степень родства ?


psa247   (2005-08-03 13:28:00) [5]

Не факт.


BiN   (2005-08-03 13:21:00) [6]

Тогда копай в сторону определения цифровой подписи у файла образа процесса.


psa247   (2005-08-03 13:11:00) [7]

Пример пригодился, спасибо...
Немного не то я хотел. Можно ли отобразить только "родные" Windows-кие процессы?


Игорь Шевченко   (2005-08-03 10:48:00) [8]


> В смысле стандартные виндовские процессы, типа: SVCHOST
> и т.п.


Очевидно, по учетной записи создавшей процесс.

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

function GetUserName (ProcessId: Cardinal): string;
var
 AccessToken: THandle;
 SidInfo: PSIDANDATTRIBUTES;
 ReturnLength: DWORD;
 ProcessHandle: THandle;
begin
 Result := '';
 ProcessHandle := OpenProcess(PROCESS_QUERY_INFORMATION, false,
   ProcessId);
 if ProcessHandle = 0 then
   Exit;
 try
   if not OpenProcessToken(ProcessHandle, TOKEN_QUERY, AccessToken) then
     Exit;
   GetMem (SidInfo, 4096);
   try
     Win32Check(GetTokenInformation(AccessToken, TokenUser, SidInfo, 4096,
       ReturnLength));
     Result := SidToName(SidInfo^.Sid);
   finally
     FreeMem(SidInfo);
     CloseHandle(AccessToken);
   end;
 finally
   CloseHandle(ProcessHandle);
 end;
end;


Дальше сравнивать полученной имя с системными...


psa247   (2005-08-03 10:45:00) [9]

Ничего тайного; Это в качестве доп. информации.


Digitman   (2005-08-03 10:37:00) [10]

а это зачем понадобилось ? каков тайный смысл в этом ?


psa247   (2005-08-03 10:29:00) [11]

В смысле стандартные виндовские процессы, типа: SVCHOST и т.п.


Игорь Шевченко   (2005-08-03 10:23:00) [12]

Такого процесса нету


Наверх

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