Announcement

Collapse
No announcement yet.

Domäne anmeldung prüfen

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

  • Domäne anmeldung prüfen

    Hallo,
    kann ich von meinem Programm aus prüfen, ob sich der Benutzer von meinem Programm an der Domäne angemeldet hat und mit welchem Name er sich angemeldet hat ?

    Tanja

  • #2
    Hallo,

    für diesen Job steht ein Füllhorn von Win32-API-Funktionen zur Verfügung: <br>
    a) Win32-API-Funktion <b>GetUserNameEx</b> (ab Windows 2000) <br>
    b) Win32-Interface <b>IADsADSystemInfo</b> (ab Windows 2000), wenn ein Active Directory beteiligt ist <br>
    c) Win32-API-Funktion <b>WNetGetUser</b> (auch ältere Windows-Versionen, aber <b>manipulierbar</b>) <br>
    d) Kombination der Win32-API-Funktion <b>GetUserName</b> und der Win32-API-Funktion <b>LookUpAccountName</b> (auch ältere Windows-Versionen)

    Die letzte Option könnte im Beispiel so aussehen:
    <pre>
    <b>procedure</b> TForm1.ButtonLookUpAccountNameClick(Sender: TObject);
    <b>var</b>
    szUserName : <b>array</b> [0..199] <b>of</b> Char;
    szDomainName : <b>array</b> [0..199] <b>of</b> Char;
    dwSize : DWORD;
    dw, dw2 : DWord;
    pSD : PSecurity_Descriptor;
    snu : Sid_Name_Use;
    <b>begin</b>
    FillChar(szUserName, SizeOf(szUserName), 0);
    FillChar(szDomainName, SizeOf(szDomainName), 0);
    GetUserName(szUserName, dwSize);
    dw2 := SizeOf(szDomainName);
    snu := SidTypeUser;
    pSD := <b>nil</b>;
    dw :=0;
    <font color="#003399"><i>// Schritt 1: Grösse ermitteln</i></font>
    LookUpAccountName(<b>nil</b>, szUserName,
    pSD, dw, szDomainName, dw2, snu);
    <b>if</b> dw &lt;&gt; 0 <b>then</b>
    <b>begin</b>
    pSD := PSecurity_Descriptor(LocalAlloc(LPTR, dw));
    <b>if</b> pSD &lt;&gt; <b>nil</b> <b>then</b>
    <b>begin</b>
    <font color="#003399"><i>// Schritt 2: echte Daten abrufen</i></font>
    <b>if</b> LookUpAccountName(<b>nil</b>, szUserName,
    pSD, dw, szDomainName, dw2, snu) <b>then</b>
    <b>begin</b>
    ShowMessage(szDomainName);
    <b>end</b>;
    LocalFree(HLOCAL(pSD));
    <b>end</b>;
    <b>end</b>
    <b>else</b>
    RaiseLastWin32Error;
    <b>end</b>;
    </pre>
    Die modernere Fassung über ADSI ist entsprechend kürzer:
    <pre>
    <b>procedure</b> TForm1.ButtonIADsADSystemInfoClick(Sender: TObject);
    <b>var</b>
    aObj : IADsADSystemInfo;
    swTmp : WideString;
    <b>begin</b>
    aObj := CoADSystemInfo.Create;
    <font color="#003399"><i>// a) Benutzer-Name</i></font>
    swTmp := aObj.UserName; <font color="#003399"><i>// Exception, wenn nicht ADS!</i></font>
    ShowMessage(swTmp);
    <font color="#003399"><i>// b) Domänen-Name</i></font>
    swTmp := aObj.DomainShortName;
    ShowMessage(swTmp);
    <b>end</b>;
    </pre&gt

    Comment


    • #3
      Hallo.
      wenn ich diese Funktion (Die obere) unter Windows 95 benutze bekomme ich immer nur dieses Fehlermeldung:

      Win32-Fehler. Code120.

      Diese Funktion ist nur im w32-Modus gültig.

      Geht dieses icht mit windows 95 ?

      Tanj

      Comment


      • #4
        Hallo,

        &gt;Geht dieses nicht mit Windows 95 ?

        Die Win32-API-Funktion LookupAccountName steht nur ab Windows NT 3.5 aufwärts zur Verfügung

        Comment


        • #5
          Gibt es eine andere Möglichkeit für Windows 95 ?

          Tanj

          Comment


          • #6
            Hallo,
            bei erste funktion geht ab und zu einmal. Wenn ich die Funktion Aufrufe so bekomme ich immer VORDEFINIERT. Wenn ich jedoch die Funktion mehrmals hintereinander aufrufe geht es dann irgendwann ?

            Das ist doch komisch oder.

            Bei der zweiten funktion muß ich ja mittels der Uses funktion etwas noch einbinden. Nur was ??

            Tanj

            Comment

            Working...
            X