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