![]() |
Domain Name auslesen
Hallo Chris
Danke für den Hinweis. Habe nicht sofort verstanden, was Du mit einem Thread meinst! Aber ich denke, dass ich dafür ein neues Thema öffnen soll. (na ja immer diese Neulinge.... :) ) Als hier nochmals die Frage Ich suche nach einer Möglichkeit, um die Windows-Domain-User auszulesen. Ich habe zwar die Funktionen für das auslesen der lokalen User gefunden (NetQueryDisplayInformation). Damit sollte man auch die Domain-User auslesen können. Nun fehlt mir aber eine Möglichkeit, wie man den Domain-Name auslesen kann. Kann Du mir da weiter helfen? Gruss Xaver |
Moin Xaver,
ich hab' mal ein kleines Beispiel erstellt:
Delphi-Quellcode:
Anhand des Usernamens kann man ja nicht auf die Domain schliessen, da ja ein Name in mehreren Domänen vorhanden sein kann.
var
pwuiWork : PWKSTA_USER_INFO_1; begin if NetWkstaUserGetInfo(nil,1,@pwuiWork) = NErr_Success then begin try ShowMessage( WideCharToString(pwuiWork.wkui1_logon_domain)+'\'+ WideCharToString(pwuiWork.wkui1_username) ); finally NetApiBufferFree(pwuiWork); end; end; end; Dieses Beispiel gibt nur die Domäne und den Usernamen des gerade angemeldeten Users zurück. Bliebe noch zu erwähnen, dass diese Funktion im Kontext des angemeldeten Users aufgerufen werden muss. Ein Aufruf aus einem Programm heraus, dass im Kontext eines anderen Users läuft (z.B. über SU Dienst gestartet) könnte falsche Werte zurückliefern (ich hab's noch nicht ausprobiert) |
Domain name
Hallo Chris
Danke für Deine Hilfe! Sieht gut aus. Ich denke damit sollte ich mein Problem lösen können. :dancer: Gruss Xaver |
Domain-Name auslesen
Hallo Chris
Die Funktion NetWkstaUserGetInfo funktioniert zwar korrekt, gibt mir aber den Domain-Servername und nicht den Domain-Name zurück. Das würde für das Auslesen der User reichen, was ich in der Zwischenzeit auch mache. Das Problem ist jedoch, dass ich den Domain-Name ebenfalls benötige. Das ganze hängt mit dem SQL-Server zusammen, in dem man für die NT-Authentifizierung den Domain-Name angeben muss. Also habe ich jetzt zwar die Users muss denen aber den Domain-Name manuel davor setzen, was nicht gerade elegant ist. Ich habe es auch schon mit der Funktion LookupAccountSid versucht. Mit der bekomme ich den Stations-Name, auf der ich das Programm ausführe. Geht also auch nicht richtig. Mit NetServerEnum kann ich ebenfalls den Server-Name auslesen. Ich kann sogar einschränken, dass nur die Server mit SQL-Server zurückgegeben werden. Das nützt natürlich nicht allzuviel, da der SQL-Server nicht zwingend ein PDC sein muss. Hast Du noch eine Idee, die mir beim Suchen weiter hilft? :duck: Gruss Xaver |
Moin Xaver,
irgendwie hab' ich jetzt ein kleines Verständnisproblem... Die Struktur WKSTA_USER_INFO1 habe ich, folgendermassen aus der Header Datei übersetzt:
Delphi-Quellcode:
Hierbei ist wkui1_username der Accountname des Users, wkui1_logon_domain, die Domäne, an der der User angemeldet ist, wkui1_oth_domains eine mit Blanks getrennte Domänen Liste, und wkui1_logon_server der Server, der den User authentifiziert hat.
PWKSTA_USER_INFO_1 = ^WKSTA_USER_INFO_1;
WKSTA_USER_INFO_1 = packed record wkui1_username : PWChar; wkui1_logon_domain : PWChar; wkui1_oth_domains : PWChar; wkui1_logon_server : PWChar; end; Somit müsste der Member wkui1_logon_domain genau das sein, was Du brauchst, ausser natürlich
Könntest Du das bitte nochmal überprüfen? Bislang haben die Net Funktionen eigentlich keinerlei Probleme gemacht. Oder hab' ich jetzt nicht ganz verstanden, was Du vorhast? |
Hallo Chris
Ich habe es genau so implementiert, wie Du das aufgeführt hast. Habe dazu auch noch die h-Files vom Lanmanager herunter geholt ( ![]() Ich habe hier leider ebenfalls keine Domäne und kann das jeweils nur im Büro prüfen. Da das Projekt momentan noch nicht so dringend ist, entwickle ich das ganze zuhause und sehe dann am nächsten Tag, ob das funktioniert hat, was ich so gemacht habe. Gruss Xaver |
Moin Xaver,
nur zum Verständnis: Melden sich die User jetzt an der Domäne an oder nicht? |
Hallo Chris
Sie melden sich nicht an der Domain an. Alle Rechner sind als Mitglied der Arbeitsgruppe definiert, wobei der Arbeitsgruppen-Name gleich wie der Domain-Name ist, z.B. Domain-Name: VIDDOMAIN; Im Feld Mitgied von Arbeitsgruppe (Netzwerkeinstellungen) steht ebenfalls VIDDOMAIN. Also erfolgt die Anmeldung so wie ich das sehe, lokal. Gruss Xaver |
Hallo Chirs
Ich glaube ich habs gefunden, wie die Microsoftis das mit dem Domain-Name im SQL-Server Enterprise Manager machen. Die Lesen es nicht aus dem Netzwerk heraus, sondern haben eine Stored Procedure im SQL-Server definiert, mit welcher sie den Domain des Servers abfragen. Dadurch entfällt natürlich das Problem der lokalen Anmeldung. Ist ja eigentlich logisch, dass in Falle eines SQL-Zugriffs nicht die Domain-Zugehörigkeit der Workstation massgebend ist sondern die des SQL-Server bzw. des Users auf dem SQL-Server. Manchmal sind die Microsoftis schlauer als das eigentlich erlaupt ist :lol: Werde das morgen einmal auf dem Firmennetz prüfen. Lokal bekomme ich auf jedenfall das korrekte ergebnis. Gruss Xaver |
Moin Xaver,
dann funktioniert NetWkstaUserGetInfo also korrekt. Bei lokaler Anmeldung wird halt der Rechnername als Domain angegeben. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 00:09 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz