Пример получения имени пользователя и домена под которым работает текущий поток или процесс
Пухнет юзер с голоду,
Губит жизнь он с молоду.
Руки длинные у чата,
Месяц - и кранты, ребята...
// Пример получения имени пользователя и домена под которым работает // текущий поток или процесс 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;
// Получаем маркер доступа текущего потока нашего процессаifnot OpenThreadToken(GetCurrentThread(),TOKEN_QUERY,true,hToken)
thenbeginif GetLastError()< > ERROR_NO_TOKEN then exit;
// В случее ошибки - получаем маркер доступа нашего процесса.ifnot OpenProcessToken(GetCurrentProcess(),TOKEN_QUERY,hToken)
then exit;
end;
// Вывываем GetTokenInformation для получения размера буфера ifnot GetTokenInformation(hToken, TokenUser, nil, 0, cbBuf)
thenif GetLastError()< > ERROR_INSUFFICIENT_BUFFER
thenbegin
CloseHandle(hToken);
exit;
end;
if cbBuf = 0 then exit;
// Выделяем память под буфер
GetMem(ptiUser,cbBuf);
// В случае удачного вызова получим указатель на TOKEN_USERif GetTokenInformation(hToken,TokenUser,ptiUser,cbBuf,cbBuf)
thenbegin// Ищем имя пользователя и его домен по его SIDif 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 (лучше проверить на практике)
В статье описывается функция GetCurrentUserAndDomain, которая позволяет получить имя пользователя и домен, под которым работает текущий поток или процесс.
Комментарии и вопросы
Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.