Delphi World - Пример получения имени пользователя и домена под которым работает текущий поток или процесс
Delphi World - это проект, являющийся сборником статей и малодокументированных возможностей  по программированию в среде Delphi. Здесь вы найдёте работы по следующим категориям: delphi, delfi, borland, bds, дельфи, делфи, дэльфи, дэлфи, programming, example, программирование, исходные коды, code, исходники, source, sources, сорцы, сорсы, soft, programs, программы, and, how, delphiworld, базы данных, графика, игры, интернет, сети, компоненты, классы, мультимедиа, ос, железо, программа, интерфейс, рабочий стол, синтаксис, технологии, файловая система...
Пример получения имени пользователя и домена под которым работает текущий поток или процесс

Пухнет юзер с голоду,
Губит жизнь он с молоду.
Руки длинные у чата,
Месяц - и кранты, ребята...


// Пример получения имени пользователя и домена под которым работает 
// текущий поток или процесс 
type
 PTOKEN_USER = ^TOKEN_USER;
 _TOKEN_USER = record
   User : TSidAndAttributes;
 end;
 TOKEN_USER = _TOKEN_USER;

function GetCurrentUserAndDomain (
      szUser : PChar; var chUser: DWORD; szDomain :PChar; var chDomain : DWORD
 ):Boolean;
var
 hToken : THandle;
 cbBuf  : Cardinal;
 ptiUser : PTOKEN_USER;
 snu    : SID_NAME_USE;
begin
 Result:=false;
 // Получаем маркер доступа текущего потока нашего процесса
 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;

 // Вывываем GetTokenInformation для получения размера буфера 
 if not GetTokenInformation(hToken, TokenUser, nil, 0, cbBuf)
  then if GetLastError()< > ERROR_INSUFFICIENT_BUFFER
   then begin
    CloseHandle(hToken); 
    exit;
   end;

 if cbBuf = 0 then exit;

 // Выделяем память под буфер 
 GetMem(ptiUser,cbBuf);

 // В случае удачного вызова получим указатель на TOKEN_USER
 if GetTokenInformation(hToken,TokenUser,ptiUser,cbBuf,cbBuf)
  then begin
   // Ищем имя пользователя и его домен по его SID
   if LookupAccountSid(nil,ptiUser.User.Sid,szUser,chUser,szDomain,chDomain,snu)
    then Result:=true;
  end;

 // Освобождаем ресурсы 
 CloseHandle(hToken);
 FreeMem(ptiUser);
end;

// Использовать функцию можно так :
var
 Domain, User : array [0..50] of Char;
 chDomain,chUser : Cardinal;
begin
 chDomain:=50;
 chUser :=50;
 if GetCurrentUserAndDomain(User,chuser,Domain,chDomain)
  then ...
end; 

// Если вам необходимо получить только имя пользователя - используйте GetUserName
// Данный пример можно использовать и для определения - запущен ли процесс
// системой или пользователем.  Учетной записи Localsystem соответствует 
// имя пользователя - SYSTEM и домен NT AUTORITY (лучше проверить на практике)

Проект Delphi World © Выпуск 2002 - 2017
Автор проекта: Эксклюзивные курсы программирования