Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

User-Rechte unter Vista am lokalen Rechner, angemeldet an einer Domäne

2 views
Skip to first unread message

Roswitha Schoppe-Jantzen

unread,
Sep 4, 2008, 8:20:27 AM9/4/08
to
Hallo zusammen


ich möchte perVB.NET-Code ermitteln, ob ein in einer Domäne angemeldeter
Benutzer am lokalen Rechner Administratorrechte hat;
mein VB.NET-Code funktioniert unter XP, aber nicht unter Vista:

Dim myWindowsIdentity As WindowsIdentity = WindowsIdentity.GetCurrent()
Dim myWindowsPrincipal As New WindowsPrincipal(myWindowsIdentity)
Return myWindowsPrincipal.IsInRole(WindowsBuiltInRole.Administrator)


z.B. in dieser Situation:
bei einem User, der lokal Administratorrechte hat, aber in der Domäne nur
Benutzerrechte hat:
dann gibt die Funktion unter XP richtig 'true' zurück, unter Vista aber
'false'.

Wie kann ich unter Vista ermitteln, welche Rechte ein Benutzer am lokalen
System hat, wenn er gleichzeitig an der Domäne angemeldet ist?


Vielen Dank an alle!

Roswitha


Mark Heitbrink [MVP]

unread,
Sep 4, 2008, 8:37:44 AM9/4/08
to
Hi,

Roswitha Schoppe-Jantzen schrieb:


> Wie kann ich unter Vista ermitteln, welche Rechte ein Benutzer am lokalen
> System hat, wenn er gleichzeitig an der Domäne angemeldet ist?

per VB keine Ahnung, wie wäre es per Batch?

--- findadmin.bat ---
net localgroup Administratoren > %temp%\admins.txt
find /i "%username%" %temp%\admins.txt

if errorlevel 0 (
copy %temp%\admins.txt \\server\share\%username%_an_%computername%.txt
)

--- findadmin.bat ---

Ersetze \\server\share durch eine passende Freigabe in der der User
Schreibrechte hat.

Tschö
Mark
--
Mark Heitbrink - MVP Windows Server - Group Policy

Homepage: www.gruppenrichtlinien.de - deutsch
Discuss : www.freelists.org/list/gpupdate

Roswitha Schoppe-Jantzen

unread,
Sep 4, 2008, 8:57:25 AM9/4/08
to
Hallo Mark,

Danke für Deine schnelle Antwort!
Ich weiß nicht, ob ich Deinen Vorschlag richtig verstanden habe, daher noch
mal eine Nachfrage...

In meinem Programm möchte ich in Abhängigkeit davon, ob der User
Administratorrechte hat, Menüpunkte ein-bzw. ausblenden.

Habe ich Deinen Vorschlag so richtig verstanden:
Zur Laufzeit des Programms Batchdatei ausführen, danach in Datei
[_%computername%].txt schauen, ob der Username darin steht?

Viele Grüße
Roswitha


"Mark Heitbrink [MVP]" <spam...@gruppenrichtlinien.de> schrieb im
Newsbeitrag news:uIzOJsoD...@TK2MSFTNGP04.phx.gbl...

Roswitha Schoppe-Jantzen

unread,
Sep 4, 2008, 9:17:51 AM9/4/08
to
Hallo Mark,


ich habe die Batchdatei getestet;
1) -> unter XP geht es, allerdings steht dann dieses in der Textdatei:
*****************************
Aliasname Administratoren
Beschreibung Administratoren haben uneingeschränkten Vollzugriff auf den
Computer bzw. die Domäne.

Mitglieder

-------------------------------------------------------------------------------
Administrator
[unser Domänenname]\Domänen-Admins
[unser Domänenname]\Domänen-Benutzer
Der Befehl wurde erfolgreich ausgeführt.
*******************************
das hilft mir nicht so richtig, da ja nicht explicit der Benutzername
genannt wird...

2) unter Vista wird die Batchdatei nicht ausgeführt; nur wenn explicit
"Ausführen als Administrator" gewählt wird
(auch wenn der User Administratorrechte hat, werden zunächst standardmäßig
unter vista die Hauptbenutzerrechte benutzt
- daher sehe ich wenig Chance, zur Laufzeit diese Batchdatei auszuführen.

Viele Grüße
Roswitha

"Mark Heitbrink [MVP]" <spam...@gruppenrichtlinien.de> schrieb im
Newsbeitrag news:uIzOJsoD...@TK2MSFTNGP04.phx.gbl...

Mark Heitbrink [MVP]

unread,
Sep 4, 2008, 9:26:54 AM9/4/08
to
Hi,

Roswitha Schoppe-Jantzen schrieb:


> In meinem Programm möchte ich in Abhängigkeit davon, ob der User
> Administratorrechte hat, Menüpunkte ein-bzw. ausblenden.

Achso ... dann ist das mit der Batch total blöde. Ehrlich ;-)

Ich dachte du suchtest nur nach der Möglichkeit einer schnellen
quick and dirty Lösung, um es zu dokumentieren.

Da bin ich dann leider überfragt, aber wo ich mir das gerade noch einmal
anschause und "WindowsBuiltInRole.Administrator" richtig interpretiere,
dann ermittelt dein Programm nur den Benutzer "Administrator"

1. kann der anders heissen: Heinz, Dieter oder Willi
2. ist der bei Vista deaktiviert, weswegen Vista wohl auch "false"
zurückgibt

Du musst nicht den Benutzer, sondern die Mitglieder der Gruppe
Administratoren abfragen und auch diese nicht per Namen, denn dann
scheitert dein Programm auf englischen, französischen, spanischen
Rechner, denn je nach Sprahce heissen die Jungs ja immer anders.

Dafür hat MS die Wellknown SIDs.
http://www.gruppenrichtlinien.de/Grundlagen/WellKnown_SIDs.htm

Letztlich fragst du also die Gruppenmitglieder von "S-1-5-32-544" ab.

Wie man jetzt aber über VB.NET die SIDs anspricht anstelle der STRINGS
ist mir persönlich mangels Programmierkenntnissen ein Rätsel.
Aber das wäre tatsächlich der Weg, um dein Programm "Sprachfrei"
aufzubauen, was diese Abhängigkeit angeht.

Roswitha Schoppe-Jantzen

unread,
Sep 4, 2008, 9:54:38 AM9/4/08
to
Hallo Mark,

ich habe in der MSDN noch mal nachgelesen;
der Code" ..WindowsBuiltInRole.Administrator..".ist OK,
aber hier ist noch ein Hinweis von Microsoft, der mein Problem beschreibt-
siehe
http://msdn.microsoft.com/de-de/library/system.security.principal.windowsbuiltinrole.aspx
dann gibt es wohl keine gute Lösung:.(das Ausführen per rechte Maustaste
fällt aus)..

Unter Windows Vista UAC werden die Berechtigungen eines Benutzers über
User-Account-Control (UAC) bestimmt. Als Mitglied der integrierten
Administratorgruppe sind Ihnen zwei Zugriffstoken für die Laufzeit
zugewiesen: ein Standardbenutzertoken und ein Administratorzugriffstoken.
Standardmäßig verwenden Sie die Standardbenutzerrolle. Wenn Sie versuchen,
eine Aufgabe auszuführen, die Administratorrechte erfordert, können Sie Ihre
Rolle im Dialogfeld Zustimmung dynamisch erhöhen. Code, in dem die
IsInRole-Methode ausgeführt wird, zeigt das Dialogfeld Zustimmung nicht an.
Wenn Sie die Standardbenutzerrolle verwenden, gibt der Code auch dann false
zurück, wenn Sie Mitglied der integrierten Administratorgruppe sind. Sie
können vor dem Ausführen von Code Ihre Berechtigungen erhöhen, indem Sie mit
der rechten Maustaste auf das Anwendungssymbol klicken und angeben, dass Sie
die Anwendung als Administrator ausführen möchten.

Viele Grüße
Roswitha


"Mark Heitbrink [MVP]" <spam...@gruppenrichtlinien.de> schrieb im

Newsbeitrag news:OoksyHpD...@TK2MSFTNGP02.phx.gbl...

Mark Heitbrink [MVP]

unread,
Sep 4, 2008, 10:07:25 AM9/4/08
to
Hi,

Roswitha Schoppe-Jantzen schrieb:


> 1) -> unter XP geht es, allerdings steht dann dieses in der Textdatei:

> Administrator
> [unser Domänenname]\Domänen-Admins
> [unser Domänenname]\Domänen-Benutzer

Was bedeutet? Der User ist kein Administrator, sonst stünde er da drin.
Somit ist der "find" Befehl nicht erfolgreich und der Errorlevel auch nicht
mehr "0", sondern "1".

> 2) unter Vista wird die Batchdatei nicht ausgeführt; nur wenn explicit
> "Ausführen als Administrator" gewählt wird

äh? mach mal ne CMD direkt auf und fürhe dioe Befehle aus. Ich traue UAC
ja viel zu, aber "lesen" darf die Gruppe jeder authentifizierte Benutzer.

Aber die Batch ist ja innerhalb des Programmcodses sowieso unschön.

Dein VB.Net *MUSS* eine interne Methode kennen, die das macht.
Egal ob UAC oder nicht. Du liest nur die Gruppe, du willst sie nicht
schreiben.

Thomas D.

unread,
Sep 4, 2008, 6:04:46 PM9/4/08
to
Guten Abend,

Roswitha Schoppe-Jantzen schrieb:

> In meinem Programm möchte ich in Abhängigkeit davon, ob der User
> Administratorrechte hat, Menüpunkte ein-bzw. ausblenden.
>

> [...]

>
> das Ausführen per rechte Maustaste fällt aus

Du möchtest Funktionen bereitstellen, die nur durch Mitglieder der Gruppe
"Administratoren" genutzt werden können, richtig?

Dann stelle doch im Manifest auf höchste verfügbare Rechte. Sofern jemand
Mitglied der Gruppe Administratoren ist, muss die Anwendung nicht explizit
als Administrator gestartet werden, es erscheint automatisch die Nachfrage
(kein manuelles eingreifen notwendig). Standardnutzer werden nicht
belästigt.

Sollte dies der Versuch sein, eine Art Rechtemanagement in der Anwendung zu
integrieren (ohne das die Anwendung mit erhöhten Rechten läuft), wirst du
eigene Gruppen erstellen müssen, auf die du dann mit "isInRole" prüfen
kannst - das ist ja auch keine große Sache.


--
Grüße,
Thomas

Winfried Sonntag [MVP]

unread,
Sep 5, 2008, 9:18:08 AM9/5/08
to
Roswitha Schoppe-Jantzen schrieb:

> ich möchte perVB.NET-Code ermitteln, ob ein in einer Domäne angemeldeter
> Benutzer am lokalen Rechner Administratorrechte hat;
> mein VB.NET-Code funktioniert unter XP, aber nicht unter Vista:

Dann schau dir das Projekt von Peter Götz mal an:
http://www.gssg.de/net_valuser.htm

Servus
Winfried
--
Connect2WSUS: http://www.grurili.de/tools/Connect2WSUS.exe
GPO's: www.gruppenrichtlinien.de
Gruppenrichtlinien Mailingliste "gpupdate":
http://frickelsoft.net/cms/index.php?page=mailingliste

Nils Kaczenski [MVP]

unread,
Sep 5, 2008, 4:01:01 PM9/5/08
to
Moin,

Roswitha Schoppe-Jantzen schrieb:


> ich möchte perVB.NET-Code ermitteln, ob ein in einer Domäne angemeldeter
> Benutzer am lokalen Rechner Administratorrechte hat;
> mein VB.NET-Code funktioniert unter XP, aber nicht unter Vista:

unter Vista wird dir UAC dazwischenfunken. Du darfst also nicht nur auf
die Mitgliedschaft der Gruppe "Administratoren" schauen, sondern musst
das Access Token des laufenden Prozesses abfragen. Wie das geht, weiß
ich nicht (bin kein Entwickler), sollte aber recherchierbar sein.


Schöne Grüße, Nils

--
Nils Kaczenski - MVP Windows Server
www.faq-o-matic.net
Antworten bitte nur in die Newsgroup!
PM: Vorname at Nachname .de
https://mvp.support.microsoft.com/profile/Nils.Kaczenski

Mark Heitbrink [MVP]

unread,
Sep 6, 2008, 9:04:08 AM9/6/08
to
Moin,

Nils Kaczenski [MVP] schrieb:


> unter Vista wird dir UAC dazwischenfunken. Du darfst also nicht nur auf

> die Mitgliedschaft der Gruppe "Administratoren" schauen, [..]

Nicht mal kucken/lesen?

Mpft, ich brauche doch ne VM mit VISTA und UAC :-)

Nils Kaczenski [MVP]

unread,
Sep 8, 2008, 5:32:18 AM9/8/08
to
Moin,

Mark Heitbrink [MVP] schrieb:
> Nicht mal kucken/lesen?

nicht nur. Denn das zeigt nur die nominelle Mitgliedschaft, aber nicht
die faktischen Möglichkeiten, über die ja nun mal ausschließlich das
Access Token entscheidet.

Höchstens könnte man zunächst auf die Gruppe schauen - wenn der User
nicht drin ist, kann man es sich sparen, das Token zu kontrollieren.
(Wobei das nicht besonders effizient wäre.)

> Mpft, ich brauche doch ne VM mit VISTA und UAC :-)

Mein Reden.

Roswitha Schoppe-Jantzen

unread,
Sep 8, 2008, 9:56:32 AM9/8/08
to
Hallo NG!

Vielen Dank für Eure vielen wertvollen Beiträge;
ich habe daraus eine passende Lösung "zusammengesetzt":

zunächst habe ich dem zu startenden Programm ein Manifest zugeordnet, in dem
die requestedPrivileges-Rechte auf level="highestAvailable" gesetzt werden:
das führt dazu, dass Standardbenutzer mit den Benutzerrechten starten,
Domänen-Benutzer (die lokal Administratoren sind) als Administratoren (mit
Elevation-Dialog).
Danach funktioniert dann die Administrator-Abprüfung mit IsUserAnAdmin() aus
der shell32.dll und das Programm kann den Administratoren alle nötigen
Funktionen zur Verfügung stellen...

Viele Grüße und nochmal Danke!
Roswitha

"Roswitha Schoppe-Jantzen" <schoppe...@voks.de> schrieb im Newsbeitrag
news:uiReeioD...@TK2MSFTNGP03.phx.gbl...

Nils Kaczenski [MVP]

unread,
Sep 8, 2008, 11:01:01 AM9/8/08
to
Moin,

Roswitha Schoppe-Jantzen schrieb:


> Vielen Dank für Eure vielen wertvollen Beiträge;
> ich habe daraus eine passende Lösung "zusammengesetzt":

prima, danke für die Rückmeldung!

0 new messages