Добро пожаловать! Это — архивная версия форумов на «Хакер.Ru». Она работает в режиме read-only.
 

Delphi. Как узнать от какого пользователя запущен процесс?

Пользователи, просматривающие топик: none

Зашли как: Guest
Все форумы >> [Компилируемые языки] >> Delphi. Как узнать от какого пользователя запущен процесс?
Имя
Сообщение << Старые топики   Новые топики >>
Delphi. Как узнать от какого пользователя запущен процесс? - 2008-02-03 19:25:26.110000   
motorola

Сообщений: 64
Оценки: 0
Присоединился: 2007-11-13 19:44:42.273333
Как узнать от какого пользователя запущен процесс? Или запущен ли он от системного пользователя.
Post #: 1
RE: Delphi. Как узнать от какого пользователя запущен процесс? - 2008-02-03 20:14:10.446666   
blаcksun

Сообщений: 1670
Оценки: 0
Присоединился: 2007-11-19 20:03:45.703333
quote:


uses Windows, PsAPI; const SECURITY_NT_AUTHORITY: TSIDIdentifierAuthority = (Value: (0, 0, 0, 0, 0, 5)); SECURITY_BUILTIN_DOMAIN_RID = $00000020; DOMAIN_ALIAS_RID_ADMINS = $00000220; function GetCurrentUser: String; var UserName: String; UserNameLen: Dword; begin UserNameLen := 255; SetLength(UserName, UserNameLen); if GetUserName(PChar(UserName), UserNameLen) then Result := Copy(UserName, 1, UserNameLen - 1) else Result := 'Unknown'; end; function IsAdmin: Boolean; var hAccessToken: THandle; ptgGroups: PTokenGroups; dwInfoBufferSize: DWORD; psidAdministrators: PSID; x: Integer; bSuccess: BOOL; begin Result := False; bSuccess := OpenThreadToken(GetCurrentThread, TOKEN_QUERY, True, hAccessToken); if not bSuccess then begin if GetLastError = ERROR_NO_TOKEN then bSuccess := OpenProcessToken(GetCurrentProcess, TOKEN_QUERY, hAccessToken); end; if bSuccess then begin GetMem(ptgGroups, 1024); bSuccess := GetTokenInformation(hAccessToken, TokenGroups, ptgGroups, 1024, dwInfoBufferSize); CloseHandle(hAccessToken); if bSuccess then begin AllocateAndInitializeSid(SECURITY_NT_AUTHORITY, 2, SECURITY_BUILTIN_DOMAIN_RID, DOMAIN_ALIAS_RID_ADMINS, 0, 0, 0, 0, 0, 0, psidAdministrators); {$R-} for x := 0 to ptgGroups.GroupCount - 1 do if EqualSid(psidAdministrators, ptgGroups.Groups[x].Sid) then begin Result := True; Break; end; {$R+} FreeSid(psidAdministrators); end; FreeMem(ptgGroups); end; end;
Post #: 2
RE: Delphi. Как узнать от какого пользователя запущен процесс? - 2008-02-03 20:24:38.530000   
motorola

Сообщений: 64
Оценки: 0
Присоединился: 2007-11-13 19:44:42.273333
Спасибо, код пригодился. Но я имел в виду не под каким пользователем он выполняется, а от какого он запущен: SYSTEM, LOCAL SERVICE … (как в диспетчере задач)
Post #: 3
RE: Delphi. Как узнать от какого пользователя запущен процесс? - 2008-02-03 20:55:42.166666   
blаcksun

Сообщений: 1670
Оценки: 0
Присоединился: 2007-11-19 20:03:45.703333
Подумай как нить сам)) Пытаясь сделат пример, функция GetLastError() повесила мне всю систему, через 5 минут глюков IDE умерла, вместе с текушим проектом …
Post #: 4
RE: Delphi. Как узнать от какого пользователя запущен процесс? - 2008-02-03 21:09:24.240000   
rgo

Сообщений: 7170
Оценки: 281
Присоединился: 2004-09-25 05:14:25
quote:

ORIGINAL: blаcksun
Пытаясь сделат пример, функция GetLastError() повесила мне всю систему

Чёт я не понял, какой-такой пример пыталась сделать функция GetLastError?
Post #: 5
RE: Delphi. Как узнать от какого пользователя запущен процесс? - 2008-02-03 21:27:23.643333   
blаcksun

Сообщений: 1670
Оценки: 0
Присоединился: 2007-11-19 20:03:45.703333

quote:

ORIGINAL: rgo

quote:

ORIGINAL: blаcksun
Пытаясь сделат пример, функция GetLastError() повесила мне всю систему

Чёт я не понял, какой-такой пример пыталась сделать функция GetLastError?

Да я точно не разобрался .. может был какойто конфликт со скиновским двигом .. прогу одну писал, новый проект было лень делать, чтобы пример налабасать ..

Сменил
// Получаем маркер доступа текущего потока нашего процесса
OpenThreadToken(GetCurrentThread(), TOKEN_QUERY, True, hToken);
на
if not OpenThreadToken(GetCurrentThread(), TOKEN_QUERY, True, hToken) then
begin
if GetLastError <> ERROR_NO_TOKEN then Exit;
// В случее ошибки - получаем маркер доступа нашего процесса.
if not OpenProcessToken(GetCurrentProcess(), TOKEN_QUERY, hToken) then Exit;
end;

И кранты ..
Post #: 6
RE: Delphi. Как узнать от какого пользователя запущен процесс? - 2008-02-04 19:45:45.620000   
rootkit7

Сообщений: 21
Оценки: 0
Присоединился: 2008-02-04 19:19:08.676666
Здравствуйте, уважаемые читатели. Я раньше не сталкивался с процессами, но почитал статью на http://delphiworld.narod.ru и набросал код, всё вроде бы работает, но вот только он определяет пользователя у тех процессов, которые запущены под моим пользователем. Пробывал ставить Debug привелегию своему процессу, не помогает. Может кто поможет.
Вот собственно кусок кода код:
TU: PTOKEN_USER; hToken: THandle; ReturnLength: Cardinal; User: array [0..255] of char; Domain: array [0..255] of char; SizeDomain: Cardinal; SizeUser: Cardinal; SNU: SID_NAME_USE; //----------- if OpenProcessToken(hProcess, TOKEN_ADJUST_PRIVILEGES or TOKEN_QUERY, hToken) then begin GetTokenInformation(hToken, TokenUser, nil, 0, ReturnLength); GetMem(tu,ReturnLength); GetTokenInformation(hToken,TokenUser,tu,ReturnLength,ReturnLength); SizeUser := 50; SizeDomain := 50; if LookupAccountSid(nil,tu.User.Sid,User,SizeUser,Domain,SizeDomain,SNU) then x := User; end;
Зарание благодарен!
Post #: 7
Страниц:  [1]
Все форумы >> [Компилируемые языки] >> Delphi. Как узнать от какого пользователя запущен процесс?







Связаться:
Вопросы по сайту / xakep@glc.ru

Предупреждение: использование полученных знаний в противозаконных целях преследуется по закону.