Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Сервис и GetUserName [Win2k, WinXP]


Страницы:   1 2

stany ©   (2004-05-28 14:10:00) 

как будучи сервисом узнать имя текущего пользователя.
GetUserName не предлагать..


Stany   (2004-05-29 10:36:00) [21]

короче, самый простой (как говориться в лоб) вариант
try
Открытие файла('SysDrive:\UserProfile\user.dat')
except
result:='юзер залогинен'
end

Мож кто-нибудь предложит получше?? ....


VMcL   (2004-05-28 16:06:00) [22]

>>stany ©  (28.05.04 15:16) [5]

Если не ошибаюсь, в WinXP "текущий локальный пользователь" может быть не один.


stany   (2004-05-28 15:16:00) [23]

... выше, а этот код перебирает имена возможных сессий логона. Мне же нужен текущий локальный пользователь....


VMcL   (2004-05-28 14:59:00) [24]

>>stany ©  (28.05.04 14:55) [3]

Ткни меня носом, где ты увидел GetUserName:

interface

type
LUID = record
LowPart: DWORD;
HighPart: Longint;
end;
PLUID = ^LUID;
TOKEN_USER = record
User: SID_AND_ATTRIBUTES;
end;
LSA_UNICODE_STRING = record
Length: WORD;
MaximumLength: WORD;
Buffer: PWideChar;
end;
SECURITY_LOGON_SESSION_DATA = record
Size: DWORD;
LogonId: LUID;
UserName: LSA_UNICODE_STRING;
LogonDomain: LSA_UNICODE_STRING;
AuthenticationPackage: LSA_UNICODE_STRING;
LogonType: DWORD;
Session: DWORD;
Sid: PSID;
LogonTime: LARGE_INTEGER;
LogonServer: LSA_UNICODE_STRING;
DnsDomainName: LSA_UNICODE_STRING;
Upn: LSA_UNICODE_STRING;
end;
PSECURITY_LOGON_SESSION_DATA = ^SECURITY_LOGON_SESSION_DATA;

function LsaEnumerateLogonSessions(LogonSessionCount, LogonSessionList: Pointer): LongInt; stdcall; external 'Secur32.dll';
function LsaFreeReturnBuffer(Buffer: Pointer): LongInt; stdcall; external 'Secur32.dll';
function LsaGetLogonSessionData(LogonId: PLUID;ppLogonSessionData:PPSECURITY_LOGON_SESSION_DATA): LongInt; stdcall; external 'Secur32.dll';

implementation

procedure TForm1.Button1Click(Sender: TObject);
Var Session_count: DWORD;
Buffer, sess_inf: PLUID;
P: PChar;
i: integer;
sess_data: PSECURITY_LOGON_SESSION_DATA;
begin
LsaEnumerateLogonSessions(@session_count,@buffer);
except
if GetLastError<>0 then messagedlg(SYSerrormessage(GetLastError),mtError,[mbOk],0);
end;

P:=PChar(buffer);
try
for i:=0 to session_count-1 do
begin
sess_inf:= PLUID(p + i*SizeOf(LUID));
LsaGetLogonSessionData(sess_inf,@sess_data);
memo1.Lines.Add(WideCharToString(sess_data^.UserName.Buffer));
memo2.Lines.Add(IntToStr(sess_data^.LogonType));
memo3.Lines.Add(WideCharToString(sess_data^.LogonServer.Buffer));
end;
finally
LsaFreeReturnBuffer(sess_data);
LsaFreeReturnBuffer(buffer);
end;
end;


stany   (2004-05-28 14:55:00) [25]

> VMcL ©  (28.05.04 14:19) [1]
> Поиск рулит:
> http://www.delphima
вопрос повнмательнее читать - рулез, говорил же GetUserName не предлагать ....

> Clickmaker © thanks, дома попробую отъюзать


Clickmaker   (2004-05-28 14:22:00) [26]

Тогда это не текущий. Текущий - тот, под которым пашет сервис.
А интерактивных может быть несколько, например, через терминальные сессии.
В общем случае EnumWindowStations + OpenWindowStation + GetUserObjectInformation


VMcL   (2004-05-28 14:19:00) [27]

Поиск рулит:
http://www.delphimaster.ru/cgi-bin/forum.pl?id=1083989471&n=5


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо