Überprüfung der Benutzeranmeldung des Administrators in nicht englischsprachigen Windows-Installationen

8

Ich habe ein paar kleine Fragen ... Ich habe ein Programm, das eine Liste von Benutzern in einer Datenbank speichert und bei Programmstart vergleicht, ob der Benutzer in der Liste ist oder ein Administrator ist, bevor er sie benutzen darf. Zurzeit überprüfe ich einfach, ob der Benutzer ein Administrator ist, indem ich den Benutzernamen mit einer String-Konstanten namens "ADMINISTRATOR" vergleiche. Wird dies auf einem nicht-englischen System funktionieren? I.E. verwendet Windows eine sprachspezifische Version von 'Administrator'? Oder gibt es vielleicht eine aufgezählte Version des Admin-Benutzers, mit der ich anstelle meiner 'ADMINISTRATOR'-Zeichenfolge überprüfen kann? (Sie wissen, wie Windows-Ordner aufgelistet werden). Ich benutze übrigens Delphi 2009. Vielen Dank im Voraus!

    
Cassandra87 25.10.2010, 22:06
quelle

5 Antworten

7

Nein, tu es nicht so. Es wird sicherlich brechen. Sie können eine Liste aller Gruppen abrufen, in denen der Benutzer Mitglied ist, und prüfen, ob eine der SIDs S-1-5-32-544 ist, was die SID der Gruppe Administratoren ist. Es gibt eine Liste bekannter SIDs. Es gibt auch eine SID für das ursprüngliche Administratorkonto.

Hier ist die Liste:

Ссылка

    
BobbyShaftoe 25.10.2010 22:10
quelle
7

NEWS

Im Jahr 2010 kritisierte @ChristianWimmer meinen Programmierstil. Jetzt, zwei Jahre später, muss ich die Funktion wieder in meinem Programm verwenden. Also entscheide ich mich, den Codierungsstil der Funktion zu verbessern.

Überblick

Ich wähle einen kleinen Teil meiner privaten Bibliothek für Ihre Bequemlichkeit aus. Um zu testen, ob das Benutzerkonto des Zugriffstokens Mitglied der lokalen Administratorgruppe ist, übergeben Sie WinBuiltinAdministratorsSid of JwaWinNT an den eWellKnownSidType -Parameter. Beachten Sie, dass JEDI API Libray erforderlich ist, da Delphi Windows.pas unit CreateWellKnownSid() nicht definiert hat.

Implementierung

%Vor%     
Vantomex 26.10.2010 02:58
quelle
2

Dies ist ein Auszug aus JwsclToken.pas von der JEDI API & amp; WSCL. Beide Funktionen führen dieselbe Überprüfung durch, jedoch auf unterschiedliche Weise. Sie sehen, wie wenig Code verwendet wird? Der gleiche Code in einfachen WinAPI wäre mindestens 5 mal größer. Natürlich können Sie diese Funktionen nur von der Einheit selbst aufrufen. Sie müssen hier nicht kopieren !

%Vor%     
ChristianWimmer 26.10.2010 09:21
quelle
1

Es variiert von Windows-Version zu Windows-Version ... in vor-Vista ... Administrator Benutzername ist in der primären Windows-Sprache ... zum Beispiel in Spanisch ist es Administrador .

In post-vista gibt es keinen Administratorbenutzer. Sie sollten speichern und nach Benutzerberechtigungen suchen.

Ich fand diese Funktion IsAdmin und Sie könnten sie auch nützlich finden ...

    
jachguate 25.10.2010 22:14
quelle
1

Es gibt die Funktion CreateWellKnownSid .

Aber eine explizite Überprüfung auf ein Administratorkonto ist möglicherweise keine gute Idee. Führen Sie einfach die Operation aus und fragen Sie nach einer Erhöhung, wenn Sie den Fehler 'Zugriff verweigert' erhalten haben.

    
Alex 26.10.2010 05:34
quelle