Seite 1 von 1

Wie mit LookupAccountName den Domainnamen ermitteln?

Verfasst: 28.02.2005 14:59
von stbi
Moin! Ich versuche gerade, mit Hilfe der Funktion LookupAccountName_() den Namen meiner Domain zu ermitteln. Diese Funktion schaut nach, ob der übergebene User lokal, in der eigenen Domain oder in Trusted Domains zu finden ist.
Funktioniert soweit, nur wenn ich einen Account sowohl auf der lokalen Maschinen als auch auf der Domain habe, liefert er mir natürlich den Namen der lokalen Maschine, ich hätte aber gerne die Domain ermittelt.

Code: Alles auswählen

OpenConsole()

CallDebugger

; username bitte anpassen
*username = AllocateMemory(256)
PokeS(*username, "stbi")

; erster Aufruf liefert die erforderlichen Puffergroessen
rc.l = LookupAccountName_(#NULL, *username, #NULL, @sidbuflen, #NULL, @dnbuflen, @sidtype)

*domainname = AllocateMemory(dnbuflen)
*sid = AllocateMemory(sidbuflen)

rc = LookupAccountName_(#NULL, *username, *sid, @sidbuflen, *domainname, @dnbuflen, @sidtype)

domain.s = PeekS(*domainname)
PrintN(domain)

Input()

CloseConsole()
Kann mir jemand helfen und sagen, wie ich diese Funktion dazu überrede, den Domainnamen auszuspucken? Danke!

Verfasst: 10.03.2005 06:42
von Laurin
Bei mir verreckt der Code bei AllocateMemory. Du hast nicht alle Variablenwerte angegeben. Z. B. was für ein Wert versteckt sich hinter dnbuflen?


Greetz Laurin

Verfasst: 10.03.2005 09:44
von stbi
Moin! Bei mir (3.93) funktioniert der Code.

Da der Typ von dnbuflen nicht explizit angegeben wurde, wird es als long initialisiert.

Beim ersten Aufruf von LookupAccountName_() werden nur die benötigten Puffergrößen für die SID und den Domainname abgefragt, dann werden die Puffer angelegt und im zweiten Aufruf schließlich gefüllt.

Debugge mal, was Du für dnbuflen und sidbuflen vor dem AllocateMemory() für Werte rausbekommst.

Verfasst: 10.03.2005 10:33
von Rings
Tja, man sollte ab und an mal auf rückgabewerte checken ;)

Code: Alles auswählen

OpenConsole()

; username bitte anpassen
*username = AllocateMemory(256)
PokeS(*username, "zings")

; erster Aufruf liefert die erforderlichen Puffergroessen
rc.l = LookupAccountName_(#NULL, *username, #NULL, @sidbuflen, #NULL, @dnbuflen, @sidtype)
If dnbuflen=0
 Beep_(100,100)
 PrintN("Wrong username")
Else
 *domainname = AllocateMemory(dnbuflen)
 *sid = AllocateMemory(sidbuflen)
 rc = LookupAccountName_(#NULL, *username, *sid, @sidbuflen, *domainname, @dnbuflen, @sidtype)
 domain.s = PeekS(*domainname)
 PrintN(domain)
EndIf  

Input()
CloseConsole()

Verfasst: 10.03.2005 13:23
von Laurin
stbi hat geschrieben:Moin! Bei mir (3.93) funktioniert der Code.
Ich habe auch 3.93 und der Code funktioniert nicht.
Da der Typ von dnbuflen nicht explizit angegeben wurde, wird es als long initialisiert.
Jepp, das stimmt. Das Problem ist nur, die Variable ist 0. AllocateMemory funktioniert daher nicht. Dasselbe ist mit sidbuflen, diese Variable ist ebenfalls 0.


Greetz Laurin

Verfasst: 10.03.2005 18:11
von stbi
Rings hat geschrieben:Tja, man sollte ab und an mal auf rückgabewerte checken ;)
jaha, aber das war ja nur eine "Machbarkeitsstudie" 8) und kein fertiges Programm, im Debugger sieht man ja rc und dnbuflen, deshalb hab ich da auch nen rc drin