Hi Wolfgang,
kommt Zeit - kommt Rat
Private Const NERR_Success As Long = 0&
Private Const LevelUserInfo1 As Long = 1&
Private Const USER_PRIV_ADMIN As Long = 2&
Private Const VER_PLATFORM_WIN32_NT As Long = 2&
' Benutzer-Informationen:
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
' Informationen zum Betriebssystem:
Private Type OSVERSIONINFO
dwOSVersionInfoSize As Long ' Größe der Struktur
dwMajorVersion As Long ' Major-Versionsnummer
dwMinorVersion As Long ' Minor-Versionsnummer
dwBuildNumber As Long ' Build-Versionsnummer
dwPlatformId As Long ' Plattform-Kennzeichner
szCSDVersion As String * 128 ' Service Pack (Klartext)
End Type
Private Declare Function GetVersionEx Lib "kernel32" Alias "GetVersionExA"
(ByRef VersionInformation As OSVERSIONINFO) As Long
Private Declare Function NetUserGetInfo Lib "netapi32" (ByVal ServerName As
Long, ByVal UserName As Long, ByVal Level As Long, ByRef ptrBuffer As Long)
As Long
Private Declare Function NetApiBufferFree Lib "NETAPI32.DLL" (ByVal
ptrBuffer As Long) As Long
Private Declare Function GetUserName Lib "advapi32.dll" Alias "GetUserNameA"
(ByVal lpBuffer As String, ByRef Size As Long) As Long
Private Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" (ByRef
Destination As Any, ByRef Source As Any, ByVal Size As Long)
Public Function IsAdmin(Optional ByVal UserName As String) As Boolean
' ---------------------------------------------------------------
' IsAdmin prüft, ob ein Anwender zur Gruppe der Administratoren
' gehört. Wird UserName nicht übergeben, wird die Prüfung für
' den aktuell angemeldeten Benutzer auf der lokalen Maschine
' durchgeführt. Unter Windows 95/98/Me wird mangels Rechtebe-
' schränkung grundsätzlich TRUE zurückgegeben.
' ---------------------------------------------------------------
Dim OSV As OSVERSIONINFO
Dim UserInfo1 As USER_INFO_1
Dim lSize As Long
Dim ptrBuffer As Long
Dim RetVal As Long
' Windows-Versionsinformationen abfragen
OSV.dwOSVersionInfoSize = Len(OSV)
GetVersionEx OSV
' Ist als OS Windows NT/2000/XP oder Nachfolger gegeben?
If OSV.dwPlatformId <> VER_PLATFORM_WIN32_NT Then
' Es liegt keine NT-basierende Windows-Version vor.
' Die Funktion wird hier mit TRUE verlassen, da Windows
' 95/98/Me die Rechte des Anwenders nicht einschränken,
' einem Administrator vergleichbare Rechte also gegeben sind:
IsUserAdmin = True
Exit Function
End If ' Falls kein Benutzername übergeben wurde, statt-
' dessen den aktuellen Benutzernamen ermitteln:
If Len(UserName) = 0 Then
GetUserName UserName, lSize
' nötige Buffergröße ermitteln
UserName = Space$(lSize)
' Buffer bereitstellen und...
GetUserName UserName, lSize
' ...Information abholen
End If
' USER_INFO_1-Benutzerinfos auslesen:
RetVal = NetUserGetInfo(StrPtr(ComputerName), StrPtr(UserName),
LevelUserInfo1, ptrBuffer)
' War der Aufruf von NetUserGetInfo erfolgreich?
If RetVal = NERR_Success Then
' Erfolgreicher Aufruf
' Ermittelte Daten in eine USER_INFO_1-Struktur kopieren:
CopyMemory UserInfo1, ByVal ptrBuffer, Len(UserInfo1)
' Von NetUserGetInfo reservierten Speicherbereich freigeben
NetApiBufferFree ptrBuffer
' Auswerten, ob der Benutzer Administrator-Rechte hat:
IsAdmin = (UserInfo1.usri1_priv = USER_PRIV_ADMIN)
End If
End Function _________________________
Professionelle Entwicklerkomponenten
www.tools4vb.de |