Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Delphi Wie finde ich den nächsten GC? (https://www.delphipraxis.net/149469-wie-finde-ich-den-naechsten-gc.html)

cherry 22. Mär 2010 06:31


Wie finde ich den nächsten GC?
 
Hallo zusammen

Ich arbeite an einem AD Tool. Nachdem ich einen Benutzer erstellt habe, möchte ich noch das Profile- und Homedirectory erstellen und berechtigen. Nun denn, wenn ich den Benutzer berechtigen will, benötige ich seine SID und die weiss kurz nach der Erstellung nur der verantwortliche Global Catalog DC. Entsprechend erhalte ich dann eine Fehlermeldung weil der neue Benutzer noch nicht überall repliziert ist. Ok, meine Frage ist nun: Wie zum Teufel finde ich heraus, welches mein DC mit GC ist?

Danke schon mal...

cherry 23. Mär 2010 12:54

Re: Wie finde ich den nächsten GC?
 
Konnte das Problem anders lösen...

Ich hole die SID einfach mit 'GC://...' statt mit 'LDAP://...'
Dann kann ich die Ordner mit der nun gefundenen SID berechtigen (Da die Abfrage auf einen GC geht).

Wenn jmd trotzdem weiss, wie ich einen GC finde, wäre ich immer noch interessiert...

Remko 23. Mär 2010 13:59

Re: Wie finde ich den nächsten GC?
 
Since you just created the user you already have it's SID!
Just retrieve it with IADs(User).Get('ObjectSid'), it will return the Sid as a PByteArray. You can cast it to PSid using VarArrayLock.

Remko 23. Mär 2010 14:04

Re: Wie finde ich den nächsten GC?
 
To determine if a Domain Controller is a Global Catalog you can use DsGetDomainControllerInfo and infolevel 2, this returns a DS_DOMAIN_CONTROLLER_INFO_2 structure (fIsGc flag):
Delphi-Quellcode:
  DS_DOMAIN_CONTROLLER_INFO_2W = record
    NetbiosName: LPWSTR; // might be NULL
    DnsHostName: LPWSTR; // might be NULL
    SiteName: LPWSTR; // might be NULL
    SiteObjectName: LPWSTR; // might be NULL
    ComputerObjectName: LPWSTR; // might be NULL
    ServerObjectName: LPWSTR; // might be NULL
    NtdsDsaObjectName: LPWSTR; // might be NULL
    fIsPdc: BOOL;
    fDsEnabled: BOOL;
    fIsGc: BOOL;
    // Valid iff SiteObjectName non-NULL.
    SiteObjectGuid: GUID;
    // Valid iff ComputerObjectName non-NULL.
    ComputerObjectGuid: GUID;
    // Valid iff ServerObjectName non-NULL;
    ServerObjectGuid: GUID;
    // Valid iff fDsEnabled is TRUE.
    NtdsDsaObjectGuid: GUID;
  end;

cherry 23. Mär 2010 15:41

Re: Wie finde ich den nächsten GC?
 
Hi Remko...
Vielen Dank.


Alle Zeitangaben in WEZ +1. Es ist jetzt 12:28 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz