Rubrik: System/Windows · Computer/Benutzer/Ländereinstellungen | VB-Versionen: VB5, VB6 | 03.03.05 |
User SID unter WinNT/2000/XP auslesen Dieser Tipp verrät wie sich die User SID unter den Betriebssystmen WinNT/2000/XP auslesen lässt. | ||
Autor: Wolfgang Christ | Bewertung: | Views: 16.041 |
ohne Homepage | System: WinNT, Win2k, WinXP, Win7, Win8, Win10, Win11 | Beispielprojekt auf CD |
Für jeden User wird unter WInNT/2000/XP eine bestimmte ID erstellt, die das System intern für verschiedene Account-Control-Funktionen verwendet.
Wie man die SID eines bestimmten Benutzer selbst in Erfahrung bringen kann, das zeigt Ihnen nachfolgender Tipp.
Option Explicit ' zuerst die benötigte API - Funktion Private Declare Function LookupAccountName Lib "advapi32.dll" _ Alias "LookupAccountNameA" ( _ ByVal lpSystemName As String, _ ByVal lpAccountName As String, _ ByRef SID As Any, _ ByRef cbSid As Long, _ ByVal ReferencedDomainName As String, _ ByRef cbReferencedDomainName As Long, _ ByRef peUse As Long) As Long
' Funktion liefert SID des Übergebenen Users für ' ACL - Operationen ' True, wenn erfolgreich Public Function GetSIDByUserName(ByVal sUserName As String, _ ByRef bSID As Variant) As Boolean ' Hilfsvariablen Dim lResult As Long Dim bUserSid(255) As Byte Dim sDomainName As String * 255 Dim lDomainNameLength As Long Dim lSIDType As Long ' Fkt. muss zweimal aufgerufen werden um die SID zu erhalten, im ' erstem Schritt wird nur der benötigte Platz ermittelt. lResult = LookupAccountName(vbNullString, sUserName, _ bUserSid(0), 255, sDomainName, lDomainNameLength, _ lSIDType) ' Größenanpassung gemäß der im ersten Schritt ermittelten Größe sDomainName = Space(lDomainNameLength) ' erneuter Aufruf um die gesuchte SID zu erhalten lResult = LookupAccountName(vbNullString, sUserName, _ bUserSid(0), 255, sDomainName, lDomainNameLength, _ lSIDType) ' Falls Rückgabewert = 0, dann ist Aufruf fehlgeschlagen und ' SID konnte nicht ermittelt werden. GetSIDByUserName = Not (lResult = 0) bSID = bUserSid End Function
Aufrufbeispiel:
Private Sub Command1_Click() Dim bUserSID(255) As Byte If GetSIDByUserName("DOMÄNE\NUTZERNAME", bUserSID) Then ' gesuchte SID des Users gefunden, ' weiter mit ACL - Operationen ... End If End Sub
Das Ganze hier ist zwar nur für Leute, die wissen was sie wollen, aber in diesem Fall dann sicherlich brauchbar....