Announcement

Collapse
No announcement yet.

Domänennamen ermitteln

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Domänennamen ermitteln

    Hi *,<p>
    ich möchte die Domäne ermitteln, an der der User gerade angemeldet ist. Hab's schon mit LookupAccountName probiert. Da kommt aber nur Müll zurück. Hier im Forum hab ich auch nichts gefunden. Kann mir jemand weiterhelfen? Danke im voraus.<p>
    Grüße, Reimund

  • #2
    Ok, hat sich erledigt.<br>
    Ich hab in einer anderen Diskussion die Lösung bei einem Kommentar von Gesine Kuhlmann gefunden:
    Man muß LookupAccountname 2x hintereinander aufrufen. Dann klappt's.
    Wieso, ist mir allerdings unklar.<br>
    Macht nix, hauptsache, es funktioniert.<p>
    Grüße, Reimun

    Comment


    • #3
      Hab mich leider zu früh gefreut. So ganz haut das Ganze noch nicht hin:<br>
      Starte ich das Programm zum erstenmal, und führe dann per Button "LookupAccountname" aus, so vergehen bis zu 30 Sekunden, bis das Programm von diesem Befehl "zurückkommt". Beende ich dann das Programm und starte es sofort wieder, funktioniert alles sofort. Warte ich wieder einige Zeit bis zum nächsten Aufruf, dauert es wieder so lange.<br>
      Netzprobleme kann man wohl ausschließen, denn während das Programm "hängt", kann ich über den User-Manager ohne Probleme auf die entsprechende Domäne zugreifen.<br>
      Hat jemand 'ne Idee, wo das Problem liegen könnte?<p>
      Danke und bye, Reimun

      Comment


      • #4
        Hallo,

        was passiert, wenn statt dessen <b>LookupAccountSid</b> aufgerufen wird?
        <pre>
        function GetDomainName : String;
        var
        hProcess : THandle;
        hAccessToken : THandle;
        pInfoBuffer : PChar;
        szAccountName : array [0..99] of char;
        szDomainName : array [0..99] of char;
        dwBufferSize : DWORD;
        dwAccountSize : DWORD;
        dwDomainSize : DWORD;
        aSNU : SID_NAME_USE;
        begin
        dwBufferSize := 1000;
        dwAccountSize := SizeOf(szAccountName);
        dwDomainSize := SizeOf(szDomainName);
        hProcess := GetCurrentProcess;
        if OpenProcessToken(hProcess, TOKEN_READ, hAccessToken) then
        try
        GetMem(pInfoBuffer, dwBufferSize);
        try
        if GetTokenInformation(hAccessToken,TokenUser, pInfoBuffer,
        dwBufferSize, dwBufferSize) then
        LookupAccountSid(nil, PSIDAndAttributes (pInfoBuffer)^.sid,
        szAccountName, dwAccountSize,
        szDomainName, dwDomainSize, aSNU)
        else
        RaiseLastWin32Error;
        finally
        FreeMem(pInfoBuffer)
        end;
        Result := szDomainName
        finally
        CloseHandle (hAccessToken)
        end
        end;
        </pre&gt

        Comment


        • #5
          Hallo Reimund,<br>
          <br>
          Du möchtest doch ermitteln, an welcher Domäne der User gerade angemeldet ist?<br>
          Warum fragst Du nicht einfach die Umgebungsvariable USERDOMAIN ab (mit GetEnvironmentVariable)<br>
          Bei LookupAccountName/Sid besteht ja das Problem, dass das System die <b>erste</b> Domäne zurückliefert, in der der Account/die SID gefunden wurde.<br>
          Das muss aber nicht notwendiger Weise auch die sein, an der der User gerade angemeldet ist, sondern nur eine,<br>
          in der er eingerichtet ist.<br>
          <br>
          Ciao<br>
          Chri

          Comment


          • #6
            <b>An Andreas:</b><br>
            Hi und vielen Dank für den Code. Damit funktioniert es. Und so wie's momentan aussieht, auch immer.<br>
            Im Win32-API Bd. 5 von C&L habe ich eine Funktion "NetpGetDomainname" gefunden. Obwohl dort undokumentiert, habe ich versucht, sie mal mit<p>
            function NetpGetDomainname(lpDomainname: PChar; var nSize: DWORD): Boolean; stdcall; external 'netapi32.dll' name 'NetpGetDomainname';<p>
            einzubinden. Aber beim Starten des Programms kommt dann die Meldung, daß der Einsprungspunkt für die Funktion in der netapi32.dll nicht gefunden wird. Hast Du da irgendwelche Erfahrungswerte?<br><p>
            <b>An Christian:</b><br>
            Ebenfalls Hi. Ich weiß zwar nicht, wie LookupAccountname/Sid genau arbeiten, aber der Name Lookup suggeriert ja, daß irgendwo nach dem Domainnamen <i>gesucht</i> wird. Und dann trifft das natürlich zu, was Du sagst.<br>
            Und was Deinen Hinweis bzgl. USERDOMAIN angeht, kann ich nur sagen: Ups, hätte ich eigentlich selbst drauf kommen müssen. Trotzdem vielen Dank für den Tip. Das ist sicherlich der einfachste und schnellste Weg, an den Namen der aktuellen Domäne heranzukommen. Supi!<p>
            Grüße, Reimun

            Comment


            • #7
              Hallo Reimund,<br>
              <br>
              wie die Lookup Funktionen genau (intern) funktionieren, weiss ich zwar auch nicht, aber dass, mehr oder weniger, <i>irgendwo</i> gesucht wird, steht zumindest so in der Doku zu den Funktionen.<br>
              <br>
              Ciao<br>
              Chri

              Comment


              • #8
                Hallo Reimund,<br>
                <br>
                wie die Lookup Funktionen genau (intern) funktionieren, weiss ich zwar auch nicht, aber dass, mehr oder weniger, irgendwo gesucht wird, steht zumindest so in der Doku zu den Funktionen.<br>
                <br>
                Falls Du noch an noch einer Lösung interessiert bist:<br>
                http://www.entwickler-forum.de\webx?50@@.ee88d18/10<br>
                <br>
                Ciao<br>
                Chri

                Comment

                Working...
                X