|
|
Регистрация | << Правила форума >> | 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
|
||||
|
||||
Цитата:
|
#7
|
||||
|
||||
поэтому и не работает.
Код:
UserName :array [0..255] of Char; Пишу программы за еду. __________________ |
#8
|
|||
|
|||
у меня всё работает
|
#9
|
||||
|
||||
GetUserName
ConvertSidToStringSid все написано. так честнее будет: Код:
function ConvertSidToStringSid(Sid: PSID; var StringSid: LPTSTR): Boolean; stdcall; external 'Advapi32.dll' name 'ConvertSidToStringSidA'; function StringSid: String; var UserName: array [0..$ff] of Char; UserNameLen: Cardinal; cbSid: DWORD; cbReferencedDomainName: DWORD; peUse: SID_NAME_USE; Sid: PSID; ReferencedDomainName: LPTSTR; sSid: PChar; begin Result:=''; UserNameLen:=Length(UserName); GetUserName(@UserName[0], UserNameLen); cbSid:=0; cbReferencedDomainName:=0; LookupAccountName(nil, @UserName[0], nil, cbSid, nil, cbReferencedDomainName, peUse); Sid:=GetMemory(cbSid); ReferencedDomainName:=GetMemory(cbReferencedDomainName); LookupAccountName(nil, @UserName[0], Sid, cbSid, ReferencedDomainName, cbReferencedDomainName, peUse); ConvertSidToStringSid(Sid, sSid); Result:=sSid; LocalFree(Cardinal(sSid)); FreeMemory(Sid); FreeMemory(ReferencedDomainName); end; Пишу программы за еду. __________________ |