Карта сайта Kansoftware
НОВОСТИУСЛУГИРЕШЕНИЯКОНТАКТЫ
KANSoftWare

Пример получения имени пользователя и домена под которым работает текущий поток или процесс

Delphi , ОС и Железо , Компьютер

Пример получения имени пользователя и домена под которым работает текущий поток или процесс

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


// Пример получения имени пользователя и домена под которым работает 
// текущий поток или процесс 
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, демонстрирующий получение имени пользователя и домена текущего процесса или потока. Он использует функции Windows API для достижения этого.

Вот разбивка кода:

  1. Функция GetCurrentUserAndDomain принимает четыре параметра: szUser, chUser, szDomain и chDomain. Они используются для хранения полученных имени пользователя и домена.
  2. Функция сначала пытается открыть токен потока с помощью OpenThreadToken. Если это не удается, она пытается открыть токен процесса с помощью OpenProcessToken.
  3. Затем функция использует GetTokenInformation для получения размера буфера, необходимого для информации о токене. Это хранится в cbBuf.
  4. Функция выделяет память для структуры TOKEN_USER с помощью GetMem, а затем получает информацию о токене в эту структуру.
  5. Затем функция использует LookupAccountSid для преобразования SID пользователя в имя пользователя и домен.
  6. Наконец, функция освобождает любые выделенные ресурсы с помощью CloseHandle и FreeMem.

Пример использования в конце кода демонстрирует, как вызывать эту функцию и получать имя пользователя и домен.

Некоторые примечания:

  • Функция GetTokenInformation может вернуть ошибку, если буфер слишком маленький. В этом случае функция выходит без получения какой-либо информации.
  • Функция LookupAccountSid также может вернуть ошибку, если она не может преобразовать SID в имя пользователя и домен. В этом случае функция устанавливает Result в false.
  • Если вам нужно только получить имя пользователя, можно использовать функцию GetUserName вместо этого кода.
  • Этот пример можно использовать для определения, является ли процесс системным или запущенным под конкретной учеткой пользователя.
  • В целом, этот код предоставляет способ программного получения информации о безопасности текущего процесса или потока.

В статье описывается функция GetCurrentUserAndDomain, которая позволяет получить имя пользователя и домен, под которым работает текущий поток или процесс.


Комментарии и вопросы

Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS




Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.


:: Главная :: Компьютер ::


реклама


©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007
Top.Mail.Ru

Время компиляции файла: 2024-12-22 20:14:06
2025-01-29 01:19:57/0.0035080909729004/0