The following code displays the selected SID's number.

In my case S-1-5-21-1123561954-2054111206-734534423-1009

VB Code:
  1. Private Declare Function ConvertSidToStringSid Lib "ADVAPI32.dll" Alias "ConvertSidToStringSidA" (ByVal Sid As String, ByRef lpStringSid As Long) As Long
  2. Private Declare Function IsValidSid Lib "ADVAPI32.dll" (ByRef pSid As Any) As Long
  3. Private Declare Function LookupAccountName Lib "ADVAPI32.dll" Alias "LookupAccountNameA" (ByVal lpSystemName As String, ByVal lpAccountName As String, ByVal Sid As String, ByRef cbSid As Long, ByVal ReferencedDomainName As String, ByRef cbReferencedDomainName As Long, ByRef peUse As Long) As Long
  4. Private Declare Sub CopyMemory Lib "kernel32.dll" Alias "RtlMoveMemory" (ByRef Destination As Any, ByRef Source As Any, ByVal Length As Long)
  5. Private Declare Function GlobalFree Lib "kernel32.dll" (ByVal hMem As Long) As Long
  6. Private Declare Function LocalAlloc Lib "kernel32.dll" (ByVal wFlags As Long, ByVal wBytes As Long) As Long
  7. Private Declare Function LocalFree Lib "kernel32.dll" (ByVal hMem As Long) As Long
  8.  
  9. Private Sub Command1_Click()
  10.  
  11. UserSID = GetSid(Text1.Text & "\" & Text2.Text)
  12.  
  13. Text3.Text = UserSID
  14. End Sub
  15.  
  16.  
  17. Private Function GetSid(accountName As String) As String
  18.  
  19. Dim userName As String
  20. Dim UserNameSize As Long
  21. Dim Sid As String
  22. Dim SidSize As Long
  23. Dim Domain As String
  24. Dim DomainSize As Long
  25. Dim snu As Long
  26. Dim sReturn As String
  27.  
  28. userName = String$(255, 0&)
  29. Sid = String$(255, 0&)
  30. Domain = String$(255, 0&)
  31. sReturn = String$(255, 0&)
  32.  
  33. UserNameSize = 255
  34. SidSize = 255
  35. DomainSize = 255
  36.  
  37. Call LookupAccountName(vbNullString, accountName, Sid, SidSize, Domain, DomainSize, snu)
  38. If IsValidSid(ByVal Sid) = 0& Then Exit Function
  39.  
  40. Call ConvertSidToStringSid(Sid, snu)
  41. Call CopyMemory(ByVal sReturn, ByVal snu, 255)
  42.  
  43. sReturn = Left$(sReturn, InStr(vbNull, sReturn, vbNullChar, vbBinaryCompare) - vbNull)
  44. Call GlobalFree(snu)
  45.  
  46. GetSid = sReturn
  47. End Function

My question is. Why doesn't the number I get match with any of my HKEY_USERS ?

S-1-5-18
S-1-5-19
S-1-5-20

Thank you