studio - ¿Cómo puedo obtener el SID del usuario actual en VB6?
visual basic download (4)
Intenta implementar esta función:
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
Aquí hay un enlace implementado.
Tengo un código viejo que tenemos que mantener en VB6. Necesitamos agregar la capacidad de buscar el SID del usuario actual . ¿Alguien puede indicarme algún código que muestre cómo hacerlo? ¡Gracias de antemano por tu ayuda!
Un pequeño recorrido de MSDN sugiere que la función NetUserGetInfo es la que está buscando ( http://msdn.microsoft.com/en-us/library/aa370654%28VS.85%29.asp x). Y Microsoft ya ha escrito un ejemplo para usted aquí: http://support.microsoft.com/kb/151774
Aquí hay una muestra del sitio de VB NET confusamente nombrado pero confiable (que se dedicó a VB6 antes de que Microsoft inventara .NET)
Esta demostración muestra cómo llamar a GetCurrentProcess, LookupAccountSid, AllocateAndInialialidSid, OpenProcessToken y GetTokenInformation para determinar si el proceso actual se está ejecutando bajo una cuenta de administrador. Esto generalmente significa que el usuario es miembro del grupo de administración, pero bajo ciertas circunstancias (por ejemplo, ejecutándose como un servicio o posiblemente especificando un proceso diferente al devuelto por GetCurrentProcess), el valor de retorno indica si el proceso se está ejecutando bajo una cuenta con derechos de administrador. (Tenga en cuenta que la ilustración debe decir ''proceso actual'' en lugar de ''usuario'' para que sea más precisa).
Prueba esto
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