Domänennamen ermitteln



  • Hi @all,

    wie kann ich den Domänennamen ermitteln. Den Usernamen krieg ich ja über GetUserName();

    Aber wie kann ich feststellen, wie der Domänenname ist?



  • *** mach aktuell ***



  • Hi,

    schaue dir das mal an vielleicht hilft Dir das ja weiter:

    <url>http://msdn.microsoft.com/library/default.asp?url=/library/en-us/vclib/html/vclrfCSidDomain.asp</url>

    hoffe konnte helfen
    weisnichtweiter



  • Danke, aber irgendwie krieg ich das nicht richtig gebacken.

    Ich habe die

    #include <atlsecurity.h>
    

    includiert und dann

    LPCTSTR DomainName;
    DomainName = CSid::Domain();
    

    aber ich bekomme immer den Fehler:

    MeinProgDlg.cpp(159): error C2352: 'ATL::CSid::Domain::ATL::CSid::Domain': Unzulässiger Aufruf einer nicht statischen Memberfunktion



  • du musst erst eine CSid variable erstellen (sagt zumindest der compiler)

    CSid sid; // eventuell müssen noch Initialisierungen o.ä. folgen. ich kenn die Klasse nicht
    PCTSTR DomainName;
    DomainName = sid.Domain();
    


  • Ich habs jetzt so eingesetzt. Meine MessageBox zeigt mir allerdings nichts an.
    😞

    CSid sSid;
    PCTSTR DomainName;
    DomainName = sSid.Domain();
    MessageBox(DomainName);
    

    What´s wrong?



  • Weiß denn wirklich keiner, was hier falsch ist?

    Wieso bekomme ich den Domänennamen nicht angezeigt???



  • Hi,

    also die klasse musst du so verwenden das erstmal die class
    mit werten gefüllt wird. also mittels LoadAccount CSid füllen.

    weiterhin hier noch ein link um die Domain herauszufinden.
    http://www.winapi.net/index.php?inhalt=s11

    hoffe konnte helfen und gute nacht
    weisnichtweiter



  • Hi weisnichtweiter,

    die Winapi-class ist echt klasse. Hätte ich so wohl nicht alleine hinbekommen.
    Ein Problem habe ich allerdings damit noch.

    Ich benötige den Domänennamen um ein Link in den Favoriten zu setzen.
    Der Pfad dahin sieht so aus:

    // Wenn keine Domäne vorhanden

    C:\Dokumente und Einstellungen\Trikor\Favoriten

    Wenn Domäne vorhanden

    C:\Dokumente und Einstellungen\Trikor.TRIKORS_DOMAIN\Favoriten

    Mein Problem ist, das die Klasse zwar den Domänenname zurückgibt, wenn er vorhanden ist, wenn nicht gibt er allerdings TRIKOR\Trikor wieder.

    Gibt es eine Möglichkeit eindeutig zu unterscheiden ob der User an einer Domäne angemeldet ist oder nicht?
    Mit den Namen klappt es ja leider nicht. Ich hatte eigentlich gedacht das der Domänenname leer bleibt, wenn man an keiner Domäne angemeldet ist. Ist aber leider nicht so. 😞



  • Hi,

    ich wuerde erstmal den string in eine temporäre variable (strtmp)
    uebernehemen. dann strtmp.makeupper() und
    danach wuerde ich den username suchen, wenn vorhanden dann in der
    strtmp abtrennen. alles was dahinter kommt sollte die domain sein und
    wenn es so ist einfach das ganze als link nutzen.
    wenn nicht dann das machen was gemacht werden soll.
    was anderes wuerde mir jetzt auf die schnelle nicht einfallen.

    hoffe konnte helfen
    weisnichtweiter



  • Sorry ich glaube Du hast mich falsch verstanden. Ich bekomme ja den Domain-Name mit der Klasse wieder.
    Das sieht dann so aus:

    Wenn ich an meiner Domäne angemeldet bin:
    szDomainName = TRIKOR_DOMAIN
    szDomainAccount = TRIKORS_DOMAIN\Trikor
    szAccountName = Trikor

    Wenn ich an nicht meiner Domäne angemeldet bin (also lokal auf meinen Rechner):
    szDomainName = TRIKOR
    szDomainAccount = TRIKOR\Trikor
    szAccountName = Trikor

    Jetzt kann ich leider nicht erkennen, ob szDomainName wirklich an eine Domäne angeschlossen ist oder es nur der lokale Rechnername ist. Das ist aber wichtig für Dokumente und Einstellungen, da im Fall eins der Domänenname angehängt werden muß und im Fall zwei dieses nicht passieren darf.



  • *** mach aktuell***



  • Hallo,

    schaue dir das Beispiel zur entsprechenden Funktion (NetWkstaUserGetInfo) an:

    http://msdn.microsoft.com/library/en-us/netmgmt/netmgmt/netwkstausergetinfo.asp

    MfG



  • Leider gibt mir die Funktion auch den Computernamen zurück wenn er nicht an einer Domäne angeschlossen ist. 😞

    Ich hab aber jetzt eine Lösung gefunden. Einfach die Registry durchsuchen. 🙂

    Diese Funktion gibt ein TRUE zurück wenn der Computer an einer Domäne angeschlossen ist, wenn nicht dann FALSE.

    BOOL CheckIsDomain()
    {
          CRegKey key; 
    	char buffer[256]; 
    	DWORD dwCount = sizeof( buffer); 
    	key.Open( HKEY_LOCAL_MACHINE,"SYSTEM\\CurrentControlSet\\Services\\Tcpip\\Parameters", KEY_READ); 
    	key.QueryValue( buffer, "Domain", &dwCount); 
    	key.Close();
    	if( dwCount > 1 ) 
    		return TRUE;
    	else
            return FALSE;
    }
    

    Dank an alle die mir geholfen haben. 👍


Anmelden zum Antworten