Aufruf von IPrincipal.IsInRole unter Windows 7

8

Wir verwenden NTLM-Authentifizierung in unserer Anwendung, um festzustellen, ob ein Benutzer bestimmte Vorgänge ausführen kann. Wir verwenden das IPrincipal ihrer aktuellen Windows-Anmeldung (in WinForms-Anwendungen). Rufen Sie IsInRole auf für bestimmte Gruppenmitgliedschaften.

Um zu überprüfen, ob ein Benutzer ein lokaler Administrator auf dem Computer ist, verwenden wir:

%Vor%

Dies funktioniert, wenn der aktuelle Benutzer der Administrator -Benutzer ist oder ein anderer Benutzer ein Mitglied der Builtin\Administrators -Gruppe ist.

In unserem Test unter Windows 7 haben wir festgestellt, dass dies nicht mehr wie erwartet funktioniert. Der Administrator -Benutzer funktioniert immer noch einwandfrei, aber jeder andere Benutzer, der Mitglied der Gruppe Builtin\Administrators ist, gibt für den Aufruf IsInRole den Wert false zurück.

Was könnte diesen Unterschied verursachen? Ich habe das Gefühl, dass sich eine Standardeinstellung irgendwo geändert hat (möglicherweise in gpedit), aber ich finde nichts, was nach dem Schuldigen aussieht.

    
adrianbanks 20.04.2010, 10:12
quelle

5 Antworten

9

Das Problem ist, dass die Windows-Sicherheit (auch bekannt als "UAC") Ihnen im Weg steht. Es gibt eine spezielle Behandlung von Administratorrollen, und Ihr Benutzer wird diese Rollen nicht wirklich haben, bis er erhöht wird. Admin-Rollen sind in einem gewissen Sinne "ghosted": vorhanden, aber nicht für Berechtigungsprüfungen verfügbar oder sogar (leicht) auf Anwesenheit zu testen. Siehe den Hinweis unter: Ссылка

Hier ist eine Serie, die über das Problem berichtet, mit Beispielcode, der die notwendigen Problemumgehungen durchführt:

Ich habe ein ähnliches Problem in einer ASP.NET-App gelöst, indem ich meine eigene UAC-Eingabeaufforderung erstellte und den Namen & amp; Passwort zum Aufruf der Win32 Logon API. Sie können das Glück haben, in einer .NET-Desktop-App zu sein. In diesem Fall können Sie normale Erhöhungsanfragen verwenden.

Hier ist ein C # -Code, um Admin-Berechtigungen zu prüfen, ohne sie zu erhöhen.

%Vor%

Es wurde aus einem Artikel, den ich irgendwo online gefunden habe, übernommen, sorry, ich habe die Zuschreibung verloren.

    
Steve Eisner 20.04.2010, 18:35
quelle
7

Das funktionierte für mich - ich musste nur überprüfen, ob das Programm in einer Admin-Rolle gestartet wurde:

%Vor%

Hoffe jemand findet das von Nutzen!

Mike

    
Michael Watts 04.05.2011 12:50
quelle
3

Ich habe einen anderen Artikel hier auf stackoverflow gefunden, der diesen Weg anders anpackt. Ich habe es unten in eine Methode umgewandelt. Unter Windows 7 wurde für Administratoren "true" zurückgegeben, für Nicht-Administratoren "false" und für "Nicht als Administrator" als "Als Administrator ausführen". Es sieht so aus, dass dies nur mit .Net 3.5 und XP SP2 und höher funktioniert, basierend auf einem ersten Blick auf MSDN für die PrincipleContext-Klasse.

%Vor%     
DavB.cs 13.08.2011 22:57
quelle
1

Ihre Bewerbung ist nicht erhöht. Unter normalen Umständen entfernt UAC die "Administrator-ness" des Benutzers. Wenn die App nur von Administratoren verwendet werden kann, fügen Sie ein Manifest hinzu, das dazu führt, dass sie erhöht wird, damit sie ihre Verwaltung behalten können. Wenn es von beiden verwendet werden kann, besteht die beste Möglichkeit darin, in zwei Teile zu teilen, einen mit einem erhebenden Manifest und einen ohne, und den erhöhten Teil von einer Schaltfläche oder einem Menüelement zu starten, das mit dem Schild dekoriert ist, sodass Benutzer nicht klicken wenn sie keine Admins sind. (Auf älteren Betriebssystemen wird die Meldung, dass der Schild auf die Schaltfläche gesetzt wird, ignoriert.) Die Suche nach "UAC", "partition" und "shellexecute" ist hilfreich.

    
Kate Gregory 20.04.2010 18:48
quelle
0

Ich habe den gleichen Ansatz wie DavB.cs verwendet: Ссылка

Mit ein paar Unterschieden:

  1. Der Administrator könnte ein verschachteltes Mitglied der lokalen Administratorgruppe sein.
  2. Ich musste externe Anmeldeinformationen verwenden (nicht als aktueller Benutzer).
Tiele Declercq 25.09.2013 12:43
quelle

Tags und Links