Hallo,
seit Stunden versuche ich herauszufinden was an meinem Programm nicht funktioniert. Ich möchte den Benutzernamen des am Desktop angemeldeten Benutzer aus einem NT-Service ermitteln. Dabei verwende ich folgenden Code:
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 GetUserNameExString(ANameFormat: DWORD):
string;
var
Buf:
array[0..256]
of Char;
BufSize: DWORD;
GetUserNameEx:
function (NameFormat: DWORD; lpNameBuffer: LPSTR;
var nSize: ULONG): BOOL;
stdcall;
begin
Result := '
';
BufSize := SizeOf(Buf)
div SizeOf(Buf[0]);
GetUserNameEx := GetProcAddress(GetModuleHandle('
secur32.dll'), '
GetUserNameExW');
if Assigned(GetUserNameEx)
then
if GetUserNameEx(ANameFormat, @Buf[0], BufSize)
then
Result := Buf;
end;
Als Ergebnis erhalte ich jedoch nicht den Benutzernamen sondern die Workgroup und den PC-Namen im Format WORKGROUP\PC-Name
Aufruf:
showmessage(GetUserNameExString(NameSamCompatible));
Delphi XE2/64Bit. Was könnte da falsch laufen ??
KUBA