Frage

ich einige alte Code haben, dass wir in VB6 zu halten haben. Wir müssen die Fähigkeit hinzuzufügen, um es den aktuellen Benutzers SID nachzuschlagen. Kann mir jemand Punkt auf einige Code, der zeigt, wie das zu tun? Vielen Dank im Voraus für Ihre Hilfe!

War es hilfreich?

Lösung

Versuchen Sie diese

Option Explicit

'--- for OpenProcessToken
Private Const TOKEN_READ                    As Long = &H20008

Private Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" (pTo As Any, uFrom As Any, ByVal lSize As Long)
Private Declare Function GetCurrentProcess Lib "kernel32" () As Long
Private Declare Function CloseHandle Lib "kernel32" (ByVal hObject As Long) As Long
Private Declare Function OpenProcessToken Lib "advapi32.dll" (ByVal ProcessHandle As Long, ByVal DesiredAccess As Long, TokenHandle As Long) As Long
Private Declare Function GetTokenInformation Lib "advapi32.dll" (ByVal TokenHandle As Long, ByVal TokenInformationClass As Long, TokenInformation As Any, ByVal TokenInformationLength As Long, ReturnLength As Long) As Long
Private Declare Function ConvertSidToStringSid Lib "advapi32.dll" Alias "ConvertSidToStringSidA" (ByVal lpSid As Long, lpString As Long) As Long
Private Declare Function LocalFree Lib "kernel32" (ByVal hMem As Long) As Long
Private Declare Function lstrlen Lib "kernel32" Alias "lstrlenA" (ByVal lpString As Long) As Long

Public Function GetCurrentUserSid() As String
    Dim hProcessID      As Long
    Dim hToken          As Long
    Dim lNeeded         As Long
    Dim baBuffer()      As Byte
    Dim sBuffer         As String
    Dim lpSid           As Long
    Dim lpString        As Long

    hProcessID = GetCurrentProcess()
    If hProcessID <> 0 Then
        If OpenProcessToken(hProcessID, TOKEN_READ, hToken) = 1 Then
            Call GetTokenInformation(hToken, 1, ByVal 0, 0, lNeeded)
            ReDim baBuffer(0 To lNeeded)
            '--- enum TokenInformationClass { TokenUser = 1, TokenGroups = 2, ... }
            If GetTokenInformation(hToken, 1, baBuffer(0), UBound(baBuffer), lNeeded) = 1 Then
                Call CopyMemory(lpSid, baBuffer(0), 4)
                If ConvertSidToStringSid(lpSid, lpString) Then
                    sBuffer = Space(lstrlen(lpString))
                    Call CopyMemory(ByVal sBuffer, ByVal lpString, Len(sBuffer))
                    Call LocalFree(lpString)
                    GetCurrentUserSid = sBuffer
                End If
            End If
            Call CloseHandle(hToken)
        End If
        Call CloseHandle(hProcessID)
    End If
End Function

Andere Tipps

Versuchen Sie, diese Funktion zu implementieren:

Declare Function LookupAccountSid Lib "advapi32.dll" _
      Alias "LookupAccountSidA" (ByVal lpSystemName As String, _
      ByVal Sid As Long, ByVal Name As String, cbName As Long, _
      ByVal ReferencedDomainName As String, _
      cbReferencedDomainName As Long, peUse As Integer) As Long

Hier ist ein Link es umgesetzt werden.

Ein wenig von der MSDN-Cruising legt nahe, dass die NetUserGetInfo Funktion ist, die Sie suchen ( http://msdn.microsoft.com/en-us/library/aa370654%28VS.85%29.asp x). Und Microsoft hat bereits ein Beispiel für Sie hier geschrieben: http://support.microsoft.com/kb/151774

Hier ist eine Probe aus dem Verwechseln genannt, aber vertrauenswürdig VB NET Website (die VB6 vor Microsoft gewidmet .NET) erfunden

  

Diese Demo zeigt, wie man Anruf   GetCurrentProcess, LookupAccountSid,   AllocateAndInitializeSid,   Open und   GetTokenInformation, um   festzustellen, ob der aktuelle Prozess ist,   Ausführung unter einem Administrator   Konto. Diese Regel bedeutet, dass die   Benutzer ein Mitglied der ADMIN-Gruppe,   aber unter bestimmten Umständen (z.B.   als Dienst ausgeführt oder möglicherweise   Spezifizieren eines Prozesses anders als   daß zurückgegeben durch GetCurrentProcess),   Der Rückgabewert zeigt an, ob die   Prozess wird unter einem Konto ausgeführt   mit Admin-Rechten. (Beachten Sie das   Abbildung sollte sagen: ‚Strom   Prozess und nicht als ‚Benutzer‘ zu sein am meisten   genau.)

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top