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

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

// Пример получения имени пользователя и домена под которым работает 
// текущий поток или процесс 
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 (лучше проверить на практике)

Другое по теме:

Категории

Статьи

Советы

Copyright © 2022 - All Rights Reserved - www.delphirus.com