vb@rchiv
VB Classic
VB.NET
ADO.NET
VBA
C#
Erstellen von dynamischen Kontextmen?s - wann immer Sie sie brauchen!  
 vb@rchiv Quick-Search: Suche startenErweiterte Suche starten   RSS-Feeds  | Impressum  | Datenschutz  | vb@rchiv CD Vol.6  | Shop Copyright ©2000-2019
 
zurück
Rubrik: System/Windows · Computer/Benutzer/Ländereinstellungen   |   VB-Versionen: VB4, VB5, VB606.01.03
Mit welchen Rechten ist ein User angemeldet?

Dieses Beispiel zeigt, ob ein User als Admin, Benutzer mit eingeschränkten Rechten oder als Gast angemeldet ist.

Autor:   Dieter OtterBewertung:     [ Jetzt bewerten ]Views:  16.778 
www.tools4vb.deSystem:  Win9x, WinNT, Win2k, WinXP, Vista, Win7, Win8, Win10 Beispielprojekt auf CD 

Der nachfolgende Code zeigt, ob ein User im System als Admin, Benutzer mit eingeschränkten Rechten oder als Gast angemeldet ist. Die Funktion User_LogInState liefert hierbei als Rückgabewert eine der vordefinierten KONSTANTEN zurück. Die Abfrage funktioniert allerdings nur auf WinNT-Systemen, also WinNT, Win2000 und WinXP. Unter Win9x würde es beim Aufruf der NetUserGetInfo-Funktion zu einem Fehler kommen. Diesen Fehler umgehen wir insofern, indem wir vor dem Aufruf einfach das Betriebssystem ermitteln. Handelt es sich um ein Win9x-System geben wir als Rückgabewert "ADMIN" zurück.

Kopieren Sie nachfolgenden Code bitte in ein MODUL:

Option Explicit
 
' API's zum Ermitteln des Betriebssystems
Private Type OSVERSIONINFO
  dwOSVersionInfoSize As Long
  dwMajorVersion As Long
  dwMinorVersion As Long
  dwBuildNumber As Long
  dwPlatformID As Long
  szCSDVersion As String * 128
End Type
 
Private Declare Function GetVersionEx Lib "kernel32" _
  Alias "GetVersionExA" ( _
  ByRef lpVersionInformation As OSVERSIONINFO) As Long
 
Private Const VER_PLATFORM_WIN32_NT = 2
 
' API's zum Ermitteln der User-Infos
Private Declare Function NetUserGetInfo Lib "Netapi32.dll" ( _
  lpServer As Any, _
  UserName As Byte, _
  ByVal Level As Long, _
  lpBuffer As Long) As Long
 
Private Declare Function NetApiBufferFree Lib "Netapi32.dll" ( _
  ByVal lpBuffer As Long) As Long
 
Public Declare Sub CopyMemory Lib "kernel32" _
  Alias "RtlMoveMemory" ( _
  Destination As Any, _
  Source As Any, _
  ByVal Length As Long)
 
' aktueller Benutzer
Private Declare Function GetUserName Lib "advapi32.dll" _
  Alias "GetUserNameA" ( _
  ByVal lpBuffer As String, _
  nSize As Long) As Long
 
' UserInfo-Struktur
Private Type USER_INFO_1
  usri1_name         As Long
  usri1_password     As Long
  usri1_password_age As Long
  usri1_priv         As Long
  usri1_home_dir     As Long
  usri1_comment      As Long
  usri1_flags        As Long
  usri1_script_path  As Long
End Type
 
' UserStatus
Public Enum USER_PRIV
  USER_PRIV_GUEST = 0
  USER_PRIV_USER = 1
  USER_PRIV_ADMIN = 2
End Enum
' Hilfsfunktion:
' Windows NT-System? (NT, 2K, XP)
Public Function IsWinNT() As Boolean
  Dim OSVersion As OSVERSIONINFO
 
  With OSVersion
    .dwOSVersionInfoSize = Len(OSVersion)
    GetVersionEx OSVersion
 
    IsWinNT = (.dwPlatformID = VER_PLATFORM_WIN32_NT)
  End With
End Function
' Hilfsfunktion:
' Ermittelt den Namen des aktuell
' angemeldeten Benutzers
Public Function GetUser() As String
  Dim UserName As String
  Dim Result As Long
 
  UserName = Space$(256)
  Result = GetUserName(UserName, Len(UserName))
 
  If InStr(UserName, Chr$(0)) > 0 Then _
    UserName = Left$(UserName, InStr(UserName, Chr$(0)) - 1)
 
  GetUser = UserName
End Function
' Prüft, mit welchen Rechten ein User im System
' angemeldet ist
' 
' Wenn kein Username angegeben wird, wird der
' Login-Status für den aktuell angemeldeten User
' ermittelt
' 
' Rückgabewert: USER_PRIV_GUEST : Gast
'               USER_PRIV_USER  : Eingeschränkte Rechte
'               USER_PRIV_ADMIN : Administrative Rechte
' 
' Hinweis: Auf Win9x-Systemen wird IMMER USER_PRIV_ADMIN
'          zurückgegeben!
' 
Public Function User_LogInState( _
  Optional ByVal sUserName As String = "") As USER_PRIV
 
  Dim nResult As Long
  Dim nBuffer As Long
  Dim UserInfo As USER_INFO_1
  Dim bServer() As Byte
  Dim bUser() As Byte
 
  ' NT-System?
  If Not IsWinNT() Then
    ' Nein, dann immer ADMIN-Rechte!
    User_LogInState = USER_PRIV_ADMIN
  Else
 
    ' Computer und UserName in Byte-Array umwandeln
    If sUserName = "" Then sUserName = GetUser()
    bServer = "" & vbNullChar
    bUser = sUserName & vbNullChar
 
    ' UserInfo "holen"
    nResult = NetUserGetInfo( _
      bServer(0), bUser(0), &H1, nBuffer)
 
    If nResult = 0 Then
      ' Daten in InfoStruktur kopieren
      CopyMemory UserInfo, ByVal nBuffer, Len(UserInfo)
      NetApiBufferFree nBuffer
 
      ' Benutzer-Rechte auswerten
      User_LogInState = UserInfo.usri1_priv
    End If
  End If
End Function

Beispiel für den Aufruf:

Dim nState As USER_PRIV
 
nState = User_LogInState()
MsgBox "Sie sind aktuell angemeldet als: " & _
  Choose(nState + 1, "Gast", _
  "Benutzer (eingeschränkte Rechte)", _
  "Admin"), _
  vbInformation

Dieser Tipp wurde bereits 16.778 mal aufgerufen.

Voriger Tipp   |   Zufälliger Tipp   |   Nächster Tipp

Über diesen Tipp im Forum diskutieren
Haben Sie Fragen oder Anregungen zu diesem Tipp, können Sie gerne mit anderen darüber in unserem Forum diskutieren.

Neue Diskussion eröffnen

nach obenzurück


Anzeige

Kauftipp Unser Dauerbrenner!Diesen und auch alle anderen Tipps & Tricks finden Sie auch auf unserer aktuellen vb@rchiv  Vol.6
(einschl. Beispielprojekt!)

Ein absolutes Muss - Geballtes Wissen aus mehr als 8 Jahren vb@rchiv!
- nahezu alle Tipps & Tricks und Workshops mit Beispielprojekten
- Symbol-Galerie mit mehr als 3.200 Icons im modernen Look
Weitere Infos - 4 Entwickler-Vollversionen (u.a. sevFTP für .NET), Online-Update-Funktion u.v.m.
 
   

Druckansicht Druckansicht Copyright ©2000-2019 vb@rchiv Dieter Otter
Alle Rechte vorbehalten.
Microsoft, Windows und Visual Basic sind entweder eingetragene Marken oder Marken der Microsoft Corporation in den USA und/oder anderen Ländern. Weitere auf dieser Homepage aufgeführten Produkt- und Firmennamen können geschützte Marken ihrer jeweiligen Inhaber sein.

Diese Seiten wurden optimiert für eine Bildschirmauflösung von mind. 1280x1024 Pixel