![]() |
Adresse des Domänencontrollers ermitteln
Hallo zusammen!
Eine Statistikanwendung an der ich gerade arbeite soll an beliebigen Arbeitsplätzen im Unternehmens-LAN laufen und ihre Rohdaten aus einer Dateifreigabe auf dem primären Domänencontroller beziehen. Dafür müsste ich jetzt irgendwie die IP oder den Hostnamen des Domänencontrollers(=DHCP, =DNS) an dem die Workstation angemeldet ist herausfinden. Aus der Registry kriege ich es nicht raus, weil da der PDC und DHCP nur Adapterspezifisch vermerkt sind, dann müsste ich immer wissen hinter welchem RegKey sich welcher Adapter verbirgt. Mit "ipconfig" bekäme man das zwar hin, ist aber ziemlich unelegant finde ich. Gibts rgendwie einen einfachen Weg dafür oder muss ich mich mal tiefer mit der Winsock-API beschäftigen? Danke für Tips, der Rolf |
Re: Adresse des Domänencontrollers ermitteln
Die Adresse des Rechners kannst du mit
![]() |
Re: Adresse des Domänencontrollers ermitteln
Danke, aber das Problem ist nicht die Auflösung des Rechnernamens in eine IP-Adresse sondern die Ermittlung des Rechnernamens des Domaincontrollers an dem der Client angemeldet ist.
|
Re: Adresse des Domänencontrollers ermitteln
Glücklicherweise stand ich vor einiger Zeit vor dem selben Problem :lol:
Wenn du den PDC (ich glaub bei Windows Server 2003 wird der erste DC genommen, da es imho in dem Sinne keinen primären DC gibt) vom PC, auf dem das Programm läuft, und von der Domäne, in der sich dieser PC befindet, ermitteln willst, reicht ein einfacher aufruf von GetPDC ohne Parameter. Alles weitere sollte man aber im MSDN unter ![]()
Delphi-Quellcode:
PS: Ich bin mir nich mehr ganz sicher, aber es kann sein dass diese Funktion ursprünglich aus der DP stammt. Ich hoffe der (eventuell^^) Autor kann mir verzeihen, aber leider weiß ich es nicht mehr genau :duck:
function GetPDC(Host: WideString = ''; Domain: WideString = ''): String;
var pPDC : Pointer; Err : Integer; begin // Standard zuweisen pPDC:= nil; try // PDC durch API-Aufruf zuweisen Err:= NetGetDCName(PWideChar(Host), PWideChar(Domain), pPDC); // PDC auslesen und als Result festlegen if (Err = 0) and (pPDC <> nil) then Result := PWideChar(pPDC); finally // Speicher des Pointer freigeben NetApiBufferFree(pPDC); end; end; PS2: Hätt ich fast vergessen: Es ist wichtig dass der Computername im Parameter Host mit '\\' beginnt! |
Re: Adresse des Domänencontrollers ermitteln
Und was macht diese Funktion, wenn ein Fehler auftritt oder wenn sie keinen PDC gefunden hat?
dann ist nämlich Result undefiniert. Bekommst Du beim kompilieren keine Warning "Result könnte undefiniert sein" oder so? Entweder weisst Du Result am Anfang einen Leerstring zu oder machst das bei finally. |
Re: Adresse des Domänencontrollers ermitteln
Ehrlich gesagt sieht die Funktion bei mir auch etwas anders aus^^
Delphi-Quellcode:
TAPIResult ist wie folgt deklariert:
function GetPDC(Host: WideString = ''; Domain: WideString = ''): TAPIResult;
var pPDC: Pointer; begin // Standard zuweisen pPDC:= nil; try // PDC durch API-Aufruf zuweisen result.Err:= NetGetDCName(PWideChar(Host), PWideChar(Domain), pPDC); // PDC auslesen und als Result festlegen if (result.Err = 0) and (pPDC <> nil) then result.Text:= PWideChar(pPDC); finally // Speicher des Pointer freigeben NetApiBufferFree(pPDC); end; end;
Delphi-Quellcode:
Als Programmierer muss ich dann die Eigenschaft Err auswerten und Text oder ggf TextArray auswerten. Da ich hier aber die Funktion vereinfachen wollte (TAPIResult benutzte ich für mich um auf die selbe Weise verwenden zu können; mittlerweile benutze ich diese Vorgehensweise nicht mehr und es ist schon ne weile her seit dem ich den DC ermitteln musste) und ich der Meinung bin, dass ein String von sich aus leer ist, habe ich das ganze nen bissl umgeschrieben.
type
TAPIResult = record Text: String; TextArray: TStringArray; Err: HResult; end; PS: "leer" im Sinne von
Delphi-Quellcode:
:= '';
|
Re: Adresse des Domänencontrollers ermitteln
Danke an euch alle,
das hat mir sehr weiter geholfen. Habe das ganze mit dem emptystr gemacht und im nächsten Schritt die Gültigkeit des Rückgabewertes geprüft. RolfPolf |
Alle Zeitangaben in WEZ +1. Es ist jetzt 21:22 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