Delphi-PRAXiS
Seite 1 von 6  1 23     Letzte »    

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   GetUserNameEx (https://www.delphipraxis.net/66400-getusernameex.html)

Luckie 29. Mär 2006 09:01


GetUserNameEx
 
Warum bekomme ich hier...
Delphi-Quellcode:
const
  NameUnknown = 0; // Unknown name type.
  NameFullyQualifiedDN = 1; // Fully qualified distinguished name
  NameSamCompatible = 2; // Windows NT® 4.0 account name
  NameDisplay = 3; // A "friendly" display name
  NameUniqueId = 6; // GUID string that the IIDFromString function returns
  NameCanonical = 7; // Complete canonical name
  NameUserPrincipal = 8; // User principal name
  NameCanonicalEx = 9;
  NameServicePrincipal = 10; // Generalized service principal name
  DNSDomainName = 11; // DNS domain name, plus the user name

function GetUserNameEx(NameFormat: DWORD;
  lpNameBuffer: LPSTR; var nSize: DWORD):Boolean; stdcall;
  external 'secur32.dll' Name 'GetUserNameExA';

function GetLoggedOnUserNameEx(fFormat: DWORD; var Username: String): DWORD;
var
  Size             : DWORD;
  Buffer: array [0..1024] of Char;
begin
  Size := MAX_COMPUTERNAME_LENGTH + 1;
  if GetUserNameEx(fFormat, Buffer, Size) then
    SetString(Username, Buffer, Size);
  Result := GetLastError;
end;

procedure TForm1.Button1Click(Sender: TObject);
var
  Username: String;
  err: DWORD;
begin
  err := GetLoggedOnUserNameEx(3, Username);
  if err = 0 then
    ShowMessage(Username)
  else
    ShowMessage(SysErrorMessage(err));
end;
...immer die Fehlermeldung:
Zitat:

Die angegebene Domäne ist nicht vorhanden oder es konnte keine Verbindung hergestellt werden
obwohl ich mich in einer Domain befinde und auch mit ihr verbunden bin? Es dauert auch ewig bis die Funktion zurückkehrt. Funktioniert es eventuell bei euch?

ste_ett 29. Mär 2006 09:13

Re: GetUserNameEx
 
Zwei "Fehler" sind drin.

#1
Delphi-Quellcode:
Size := MAX_COMPUTERNAME_LENGTH + 1;
MAX_COMPUTERNAME_LENGTH ist definiert mit 15.
Benutzernamen können länger sein.
Size muss die Länge deines Char-Arrays ohne #0 sein.
Bei deinem Beispiel 1024.

#2
Delphi-Quellcode:
Result := GetLastError;
Den Rückgabewert solltest du von dem true/false von GetUserNameExA abhänig machen, da es mir auch schon passiert ist, dass die Funktion erfolgreich war, GetLasError aber trotzdem <> 0 war.

-edit-

Das Phänomen mit der langen Antwortzeit habe ich bei mir auch, ich denke mal, dass das Problem hierbei bei Domänen-controller liegt.

Luckie 29. Mär 2006 09:21

Re: GetUserNameEx
 
Danke für die Tipps. Sieht jetzt so aus:
Delphi-Quellcode:
function GetLoggedOnUserNameEx(fFormat: DWORD; var Username: String): DWORD;
var
  Size: DWORD;
  Buffer: array [0..1024] of Char;
begin
  Result := 0;
  Size := sizeof(Buffer);
  if GetUserNameEx(fFormat, Buffer, Size) then
    SetString(Username, Buffer, Size)
  else
    Result := GetLastError;
end;
Fehlermeldung bleibt allerdings. Geht es denn bei dir?

ste_ett 29. Mär 2006 09:26

Re: GetUserNameEx
 
Ja, bei mir geht's. :)

sakura 29. Mär 2006 09:38

Re: GetUserNameEx
 
Danke für die Routine :mrgreen: Die Ergebnisse für die Werte 0 bis 11:
Code:
0 - 
1 - CN=Daniel Wischnewski,OU=User,OU=Office Ottobrunn,DC=gatenetwork,DC=office
2 - GATENETWORK\Daniel
3 - Daniel Wischnewski
4 - [email]daniel@gatenetwork.offi[/email]ce
5 - [email]daniel@gatenetwork.offi[/email]ce
6 - {aaaaaaaa-dddd-5555-yyyy-xxxxxxxxxxxx}
7 - gatenetwork.office/Office Ottobrunn/User/Daniel Wischnewski
8 - [email]daniel@gatenetwork.offi[/email]ce
9 - gatenetwork.office/Office Ottobrunn/User Daniel Wischnewski
10 - gatenetwork.office/Office Ottobrunn/User Daniel Wischnewski
11 - gatenetwork.office/Office Ottobrunn/User Daniel Wischnewski
...:cat:...

Luckie 29. Mär 2006 09:44

Re: GetUserNameEx
 
Grml. Und warum bei mir mal wieder nicht? :roll:

OK, da es funktioniert, habe ich es gleich mal für die Code-Lib vorgeschlagen.

Matze 29. Mär 2006 09:47

Re: GetUserNameEx
 
Zitat:

Zitat von Luckie
OK, da es funktioniert, habe ich es gleich mal für die Code-Lib vorgeschlagen.

Ich habe mir auch schon überlegt, es hineinzustellen, nur warte ich die Ursache ab, wieso es nicht geht. Evtl muss ja irgendetwas dabei beachtet werden.

sakura 29. Mär 2006 09:50

Re: GetUserNameEx
 
Zitat:

Zitat von Luckie
Grml. Und warum bei mir mal wieder nicht? :roll:

Bist Du Dir sicher, dass Dein Rechner auch korrekt am Netzwerk angemeldet ist - logst Du Dich an der Domaine ein?

...:cat:...

Luckie 29. Mär 2006 10:07

Re: GetUserNameEx
 
Unter "Anmelden an" steht DATAWERK. Mein Benutzerprofil scheint aber lokal auf dem Rechner zu liegen.

Christian Seehase 29. Mär 2006 18:39

Re: GetUserNameEx
 
Moin Luckie,

mit 2 klappt das bei mir sogar ohne Domänenzugehörigkeit, bei den übrigen erhalte ich 1332 (Zuordnungen von Kontennamen und Sicherheitskennungen wurden nicht durchgeführt)
Der Ort an dem das Profil liegt, spielt IMHO keine Rolle.
Das Problem könnte sein, dass Du Dich meist auch dann an einem Rechner anmelden kannst, wenn Du kein Netzwerk zur Verfügung hast, da dann mit dem gecachten Profil angemeldet wird.
Hast Du denn wirklich Netzwerkzugriff?


Alle Zeitangaben in WEZ +1. Es ist jetzt 08:03 Uhr.
Seite 1 von 6  1 23     Letzte »    

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz