Jak uzyskać pełną nazwę zalogowanego użytkownika do systemu

0

Witam.

var
  StrUserName: PChar;
  Size: DWord;
begin
  Size:=250;
  GetMem(StrUserName, Size);
  GetUserName(StrUserName, Size);
  ShowMessage(StrPas(StrUserName));
  FreeMem(StrUserName);

GetUserName oddaje tylko 20 pierwszych znaków.
Jak uzyskać pełną nazwę użytkownika który w nazwie ma więcej niż 20 znaków.

Windows 7 .. do 10

0

Próbowałeś tak?

GetEnvironmentVariable('USERNAME')
0

GetEnvironmentVariable('USERNAME') oddaje tylko 20 znaków.

Z GetNameUserEx mam błędną odpowiedź. ( załącznik )

0

@dasej: czyżby problem z uprawnieniami?

0

W dokumentach windowsa dane są pełne.
Przypuszczam że metoda którą się posługuję jest stara i dlatego NIE MA pełnej nazwy.

0

Funkcja GetUserNameEx zadziała tylko z pierwszym parametrem NameSamCompatible prawdopodobnie tak błąd się pojawia jeżeli konto nie jest w domenie Windows (chociaż wtedy teoretycznie powinno zwrócić ERROR_NO_SUCH_DOMAIN a nie ERROR_NONE_MAPPED). Tylko nie wiem czy to zwróci pełną nazwę użytkownika i nie sprawdzę, bo nie mam takiej długiej nazwy (gdyby funkcja mogła być wywołana z parametrem NameUserPrincipal to na pewno).

0

Z ciekawości założyłem w AD użytkownika o nazwie z 30 znaków. Nie mogłem się w ogóle zalogować do systemu. Wpuściło mnie dopiero gdy jako nazwę użytkownika wpisałem pierwsze 20 znaków nazwy. Dopiero wtedy spojrzałem w AD, że nazwa jest w pełnej długości, ale w polu "nazwa użytkownika dla systemów starszych niż windows 2000" jest tylko 20 znaków.

https://support.oneidentity.com/active-roles/kb/45002/length-of-user-logon-name-pre-windows-2000-samaccountname-is-limited-to-20-characters
https://docs.microsoft.com/en-us/windows/win32/adschema/a-samaccountname?redirectedfrom=MSDN

1 użytkowników online, w tym zalogowanych: 0, gości: 1