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!
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:
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.
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.
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%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 ...
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.
Tags und Links delphi login administrator non-english