![]() |
|
|
|||||||
| Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
|
Опции темы | Поиск в этой теме | Опции просмотра |
|
|
|
#1
|
|||
|
|||
|
как определить что моя программа запущена как системный процесс?
думаю есть какая то стандартная функция advapi32, но я её не знаю что то типо isProcessSystem(p:HProc); есть такое? или как такое сделать? нашёл функцию GetSidSubAuthority, она возвращает Integrity Level, который, насколько я понимаю и является показателем системности процесса, у функции есть входящие параметры pSid: Pointer; и nSubAuthority: DWORD , откуда мне их узнать если возможно(без извращений) для своей собственной программы?) и в том ли направлении я копаю? сразу говорю, что функция GetUserName не подходит, так как имя ситсемы разное бывает, а пользователь тоже может назваться 'система' или 'system' поэтому по имени не вариант |
|
#2
|
||||
|
||||
|
Цитата:
|
|
#3
|
|||
|
|||
|
Цитата:
procedure ConvertSidToStringSid(SID: PSID; var StringSid: LPSTR); stdcall; external advapi32 name 'ConvertSidToStringSidA'; вместо сид мне как "S-1-5-18" указывать? |
|
#4
|
||||
|
||||
|
Цитата:
Используешь её так: Код:
if GetUserSIDStr('', UserName) = 'S-1-5-18' then ShowMessage('Это система'); |
| Эти 2 пользователя(ей) сказали Спасибо poli-smen за это полезное сообщение: | ||
M.A.D.M.A.N. (14.11.2012),
reqyz (14.11.2012)
| ||
|
#5
|
|||
|
|||
|
Цитата:
Код:
function isSystemProcess:boolean;
var
UserName :PChar;
UserNameLen:LongWord;
PSID, PRef: Pointer;
SIDSize, RefSize, peUse: Cardinal;
sSID:Pchar;
begin
result:=false;
UserNameLen := 255;
GetUserName(UserName,UserNameLen);
SIDSize:=0;
RefSize:=0;
LookupAccountName('',UserName,nil,SIDSize,nil,RefSize,peUse);
GetMem(PSID,SIDSize);
GetMem(PRef,RefSize);
try
if(LookupAccountName('',UserName,PSID,SIDSize,PRef,RefSize,peUse))then
ConvertSidToStringSid(PSID,sSID);
result:=sSID='S-1-5-18';
finally
FreeMem(PRef);
FreeMem(PSID);
end;
end; |
|
#6
|
||||
|
||||
|
Цитата:
|