vb@rchiv
VB Classic
VB.NET
ADO.NET
VBA
C#

https://www.vbarchiv.net
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:  Views:  18.091 
www.tools4vb.deSystem:  Win9x, WinNT, Win2k, WinXP, Win7, Win8, Win10, Win11 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



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.
 
 
Copyright ©2000-2024 vb@rchiv Dieter OtterAlle 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.