
Verschiedene Methoden, um den aktuellen Benutzernamen zu erhalten, ohne whoami zu verwenden.
Einige Experimente, um den aktuellen Benutzernamen abzurufen, ohne whoami.exe oder ähnliche Binärdateien aufzurufen.
Die Umgebungsvariablen aus der PEB-Struktur abrufen und nach dem Benutzernamen durchsuchen.
Die Funktion NtQueryInformationProcess gibt eine "PROCESS_BASIC_INFORMATION"-Struktur zurück, die einen Zeiger auf die Basisadresse des PEB enthält.
Die PEB-Struktur enthält einen Zeiger "ProcessParameters" auf eine RTL_USER_PROCESS_PARAMETERS-Struktur.
Aus dieser Struktur erhält man einen Zeiger "Environment" auf die Umgebungsvariablen und einen Zeiger "EnvironmentSize" auf die Größe der Umgebungsvariablen.
Liest die Anzahl der in "EnvironmentSize" angegebenen Bytes von der Adresse "Environment" als UNICODE-Text aus, parst die Umgebungsvariablen und gibt die mit dem Namen "USERNAME" aus. Wenn alle Umgebungsvariablen gewünscht sind, siehe dieses Repository.


Zugriff auf ein Token erhalten, die SID des Benutzers im Zeichenfolgenformat finden und sie mit der Funktion LookupAccountSid übersetzen.
Die Funktion NtOpenProcessToken erstellt ein Zugriffstoken, das dem aktuellen Prozess zugeordnet ist.
Die Funktion NtQueryInformationToken ruft Informationen aus dem erstellten Token ab. Mit dem Wert "tokenUser" (1) im Feld "TOKEN_INFORMATION_CLASS" erhält man Informationen über den Benutzernamen, die im Zeiger "TokenInformation" gespeichert sind.
Die Funktion ConvertSidToStringSid konvertiert die SID des Benutzers vom binären Format in das Zeichenfolgenformat.
Die Funktion LookupAccountSid nimmt die SID im Zeichenfolgenformat und gibt den Benutzernamen zurück.


Zugriff auf ein Token und ein Policy-Objekt erhalten und den Benutzernamen mit der Funktion LsaLookupSids abrufen.
Die Funktionen NtOpenProcessToken und NtQueryInformationToken werden wie in Methode 2 verwendet und geben einen Zeiger "TokenInformation" mit der SID des Benutzers im Binärformat zurück.
Die Funktion LsaOpenPolicy erstellt einen Handle auf das Policy-Objekt im aktuellen System.
Die Funktion LsaLookupSids nimmt einen Zeiger auf die SID und gibt eine LSA_TRANSLATED_NAME-Struktur zurück, die den Benutzernamen enthält.


Eine Named Pipe und einen sekundären Thread erstellen, in die Named Pipe schreiben und daraus lesen und den Benutzernamen von der undokumentierten Funktion NpGetUsername abrufen.


Benutzernamen abrufen, wenn der Computer mit einer Domäne verbunden ist, mithilfe der Funktion CoCreateInstance wie im MSDN-Beispiel. Es verwendet die Klasse ADSystemInfoClass und die Schnittstellen ADSystemInfo und IADsADSystemInfo aus ActiveDS.dll, die sich bereits im Projektordner befinden, sodass die DLL nicht benötigt wird.
Wenn keine Verbindung zur AD besteht:

Wenn eine Verbindung besteht:
