Results 1 to 2 of 2

Thread: List Logged On users [Resolved]

  1. #1

    Thread Starter
    Lively Member matt3011's Avatar
    Join Date
    May 2002
    Location
    France
    Posts
    82

    List Logged On users [Resolved]

    Hello, I've looked many places but I still can't make this work. Everything seems to work right until the LookupAccountSid.

    I adapted the code from PSLoggedOn which is in C

    I don't know what's wrong.

    I call the last function from the main one. As it is just debugging, don't care of the argument for that function and it doesn't return anything.

    VB Code:
    1. Declare Function GetLastError Lib "kernel32" () As Integer
    2.  
    3.     Declare Function LookupAccountSid Lib "advapi32.dll" Alias "LookupAccountSidA" (ByVal lpSystemName As String, ByVal Sid As Integer, ByVal Name As String, ByRef cbName As Integer, ByVal ReferencedDomainName As String, ByRef cbReferencedDomainName As Integer, ByRef peUse As Integer) As Integer
    4.  
    5.     Declare Function AllocateAndInitializeSid Lib "advapi32.dll" (ByVal pIdentifierAuthority As SID_IDENTIFIER_AUTHORITY, ByVal nSubAuthorityCount As Byte, ByVal nSubAuthority0 As Int32, ByVal nSubAuthority1 As Int32, ByVal nSubAuthority2 As Int32, ByVal nSubAuthority3 As Int32, ByVal nSubAuthority4 As Int32, ByVal nSubAuthority5 As Int32, ByVal nSubAuthority6 As Int32, ByVal nSubAuthority7 As Int32, ByRef lpPSid As Integer) As Integer
    6.  
    7.     Declare Function IsValidSid Lib "advapi32.dll" (ByVal pSid As Integer) As Integer
    8.  
    9.     Declare Sub FreeSid Lib "advapi32.dll" (ByVal pSid As Integer)
    10.  
    11.     Public Structure SID_IDENTIFIER_AUTHORITY
    12.         Dim Value() As Byte
    13.     End Structure
    14.  
    15.     Public Sub Init_Sid_Authority(ByVal Value As SID_IDENTIFIER_AUTHORITY)
    16.         Value.Value = New Byte() {0, 0, 0, 0, 0, 0}
    17.     End Sub
    18.  
    19.     Public Function myValue(ByVal int1 As Integer, ByVal int2 As Integer) As Integer
    20.         If int1 = -1 Then
    21.             Return int2
    22.         Else
    23.             Return int1
    24.         End If
    25.     End Function
    26.     Public Function myValue2(ByVal int1 As Integer) As Integer
    27.         If int1 = 0 Then
    28.             Return 10
    29.         Else
    30.             Return int1
    31.         End If
    32.     End Function
    33.     Public Function swscanf(ByVal SubKeyName As String, ByRef AuthorityVal As Integer, ByRef SubAuthorityVal0 As Integer, ByRef SubAuthorityVal1 As Integer, ByRef SubAuthorityVal2 As Integer, ByRef SubAuthorityVal3 As Integer, ByRef SubAuthorityVal4 As Integer, ByRef SubAuthorityVal5 As Integer, ByRef SubAuthorityVal6 As Integer, ByRef SubAuthorityVal7 As Integer) As Integer
    34.         Dim SubAuthorityCount As Integer = 0
    35.  
    36.         Try
    37.             SubKeyName = SubKeyName.Substring(SubKeyName.IndexOf("-") + 1)
    38.         Catch
    39.             Return SubAuthorityCount
    40.         End Try
    41.  
    42.         Try
    43.             SubKeyName = SubKeyName.Substring(SubKeyName.IndexOf("-") + 1)
    44.             SubAuthorityCount += 1
    45.         Catch
    46.             Return SubAuthorityCount
    47.         End Try
    48.  
    49.         Try
    50.             AuthorityVal = CInt(SubKeyName.Substring(0, myValue(SubKeyName.IndexOf("-"), SubKeyName.Length)))
    51.             SubAuthorityCount += 1
    52.             SubKeyName = SubKeyName.Substring(myValue2(SubKeyName.IndexOf("-") + 1))
    53.         Catch
    54.             Return SubAuthorityCount
    55.         End Try
    56.  
    57.         Try
    58.             SubAuthorityVal0 = CInt(SubKeyName.Substring(0, myValue(SubKeyName.IndexOf("-"), SubKeyName.Length)))
    59.             SubAuthorityCount += 1
    60.             SubKeyName = SubKeyName.Substring(myValue2(SubKeyName.IndexOf("-") + 1))
    61.         Catch
    62.             Return SubAuthorityCount
    63.         End Try
    64.  
    65.         Try
    66.             SubAuthorityVal1 = CInt(SubKeyName.Substring(0, myValue(SubKeyName.IndexOf("-"), SubKeyName.Length)))
    67.             SubAuthorityCount += 1
    68.             SubKeyName = SubKeyName.Substring(myValue2(SubKeyName.IndexOf("-") + 1))
    69.         Catch
    70.             Return SubAuthorityCount
    71.         End Try
    72.  
    73.         Try
    74.             SubAuthorityVal2 = CInt(SubKeyName.Substring(0, myValue(SubKeyName.IndexOf("-"), SubKeyName.Length)))
    75.             SubAuthorityCount += 1
    76.             SubKeyName = SubKeyName.Substring(myValue2(SubKeyName.IndexOf("-") + 1))
    77.         Catch
    78.             Return SubAuthorityCount
    79.         End Try
    80.  
    81.         Try
    82.             SubAuthorityVal3 = CInt(SubKeyName.Substring(0, myValue(SubKeyName.IndexOf("-"), SubKeyName.Length)))
    83.             SubAuthorityCount += 1
    84.             SubKeyName = SubKeyName.Substring(myValue2(SubKeyName.IndexOf("-") + 1))
    85.         Catch
    86.             Return SubAuthorityCount
    87.         End Try
    88.  
    89.         Try
    90.             SubAuthorityVal4 = CInt(SubKeyName.Substring(0, myValue(SubKeyName.IndexOf("-"), SubKeyName.Length)))
    91.             SubAuthorityCount += 1
    92.             SubKeyName = SubKeyName.Substring(myValue2(SubKeyName.IndexOf("-") + 1))
    93.         Catch
    94.             Return SubAuthorityCount
    95.         End Try
    96.  
    97.         Try
    98.             SubAuthorityVal5 = CInt(SubKeyName.Substring(0, myValue(SubKeyName.IndexOf("-"), SubKeyName.Length)))
    99.             SubAuthorityCount += 1
    100.             SubKeyName = SubKeyName.Substring(myValue2(SubKeyName.IndexOf("-") + 1))
    101.         Catch
    102.             Return SubAuthorityCount
    103.         End Try
    104.  
    105.         Try
    106.             SubAuthorityVal6 = CInt(SubKeyName.Substring(0, myValue(SubKeyName.IndexOf("-"), SubKeyName.Length)))
    107.             SubAuthorityCount += 1
    108.             SubKeyName = SubKeyName.Substring(myValue2(SubKeyName.IndexOf("-") + 1))
    109.         Catch
    110.             Return SubAuthorityCount
    111.         End Try
    112.  
    113.         Try
    114.             SubAuthorityVal7 = CInt(SubKeyName.Substring(0, myValue(SubKeyName.IndexOf("-"), SubKeyName.Length)))
    115.             SubAuthorityCount += 1
    116.             SubKeyName = SubKeyName.Substring(myValue2(SubKeyName.IndexOf("-") + 1))
    117.         Catch
    118.             Return SubAuthorityCount
    119.         End Try
    120.  
    121.         Return SubAuthorityCount
    122.  
    123.     End Function
    124.  
    125.     Public Function IsUserLoggedOn(ByVal UserNameToCheck As String) As Boolean
    126.         Dim i As Integer
    127.         Dim usersKey As Microsoft.Win32.RegistryKey
    128.         Dim ServerName As String = "\\MATT3011-SERVER"
    129.  
    130.         Dim SubAuthorityCount As Integer
    131.         Dim SubAuthorityVal() As Integer
    132.         Dim AuthorityVal As Integer
    133.         Dim authority As SID_IDENTIFIER_AUTHORITY
    134.         Dim sid As Integer
    135.         Dim UserNameSize As Integer
    136.         Dim DomainNameSize As Integer
    137.         Dim UserName As String
    138.         Dim DomainName As String
    139.         Dim sidType As Integer
    140.         Dim res As Integer
    141.  
    142.  
    143.         usersKey = Microsoft.Win32.RegistryKey.OpenRemoteBaseKey(Microsoft.Win32.RegistryHive.Users, ServerName)
    144.  
    145.  
    146.         For i = 0 To usersKey.SubKeyCount - 1
    147.             If usersKey.GetSubKeyNames(i).ToLower <> ".default" And usersKey.GetSubKeyNames(i).ToLower.IndexOf("classes") = -1 Then
    148.  
    149.                 'Initialize variables
    150.                 SubAuthorityCount = 0
    151.                 SubAuthorityVal = New Integer() {0, 0, 0, 0, 0, 0, 0, 0}
    152.                 AuthorityVal = 0
    153.                 Init_Sid_Authority(authority)
    154.                 sid = 0
    155.                 sidType = 0
    156.                 UserNameSize = 1024
    157.                 DomainNameSize = 1024
    158.                 UserName = New String(" ", UserNameSize)
    159.                 DomainName = New String(" ", DomainNameSize)
    160.  
    161.  
    162.                 SubAuthorityCount = swscanf(usersKey.GetSubKeyNames(i), AuthorityVal, SubAuthorityVal(0), SubAuthorityVal(1), SubAuthorityVal(2), SubAuthorityVal(3), SubAuthorityVal(4), SubAuthorityVal(5), SubAuthorityVal(6), SubAuthorityVal(7))
    163.  
    164.  
    165.  
    166.                 If SubAuthorityCount >= 3 Then
    167.                     SubAuthorityCount -= 2
    168.                     ReDim Preserve authority.Value(5)
    169.                     authority.Value(5) = AuthorityVal And &HFF
    170.                     authority.Value(4) = (AuthorityVal And &HFF00) / &HFF
    171.                     authority.Value(3) = (AuthorityVal And &HFF0000) / &HFFFF
    172.                     authority.Value(2) = (AuthorityVal And &HFF000000) / &HFFFFFF
    173.                     authority.Value(1) = 0
    174.                     authority.Value(0) = 0
    175.  
    176.                     If AllocateAndInitializeSid(authority, SubAuthorityCount, SubAuthorityVal(0), SubAuthorityVal(1), SubAuthorityVal(2), SubAuthorityVal(3), SubAuthorityVal(4), SubAuthorityVal(5), SubAuthorityVal(6), SubAuthorityVal(7), sid) Then
    177.                         If IsValidSid(sid) Then
    178.                             res = LookupAccountSid(ServerName, sid, UserName, UserNameSize, DomainName, DomainNameSize, sidType)
    179.  
    180.                             If res Then
    181.                                 MsgBox(DomainName.TrimEnd & "\" & UserName.TrimEnd)
    182.                             Else
    183.                                 MsgBox(GetLastError)
    184.                             End If
    185.                         End If
    186.                     End If
    187.                     If sid Then FreeSid(sid)
    188.                 End If
    189.  
    190.             End If
    191.         Next
    192.     End Function
    Last edited by matt3011; Oct 27th, 2004 at 03:41 AM.

  2. #2

    Thread Starter
    Lively Member matt3011's Avatar
    Join Date
    May 2002
    Location
    France
    Posts
    82
    It's Working now. Here is the code :
    VB Code:
    1. <DllImport("advapi32")> Public Function LookupAccountSidA(ByVal lpSystemName As String, ByVal Sid As Integer, ByVal Name As Stringbuilder, ByRef cbName As Integer, ByVal ReferencedDomainName As Stringbuilder, ByRef cbReferencedDomainName As Integer, ByRef peUse As Integer) As Integer
    2.  
    3.     End Function
    4.  
    5.     <DllImport("advapi32")> Public Function AllocateAndInitializeSid(ByRef pIdentifierAuthority As SID_IDENTIFIER_AUTHORITY, ByVal nSubAuthorityCount As Byte, ByVal nSubAuthority0 As Integer, ByVal nSubAuthority1 As Integer, ByVal nSubAuthority2 As Integer, ByVal nSubAuthority3 As Integer, ByVal nSubAuthority4 As Integer, ByVal nSubAuthority5 As Integer, ByVal nSubAuthority6 As Integer, ByVal nSubAuthority7 As Integer, ByRef lpPSid As Integer) As Integer
    6.  
    7.     End Function
    8.  
    9.     <DllImport("advapi32")> Public Function IsValidSid(ByVal pSid As Integer) As Integer
    10.  
    11.     End Function
    12.  
    13.     <DllImport("advapi32")> Public Sub FreeSid(ByVal pSid As Integer)
    14.  
    15.     End Sub
    16.  
    17.  
    18.     <StructLayout(LayoutKind.Sequential)> Public Structure SID_IDENTIFIER_AUTHORITY
    19.         <MarshalAs(UnmanagedType.ByValArray, SizeConst:=6, ArraySubType:=UnmanagedType.AsAny)> Public Value() As Byte
    20.     End Structure
    21.  
    22.     Public Sub Init_Sid_Authority(ByVal Value As SID_IDENTIFIER_AUTHORITY)
    23.         Value.Value = New Byte() {0, 0, 0, 0, 0, 0}
    24.     End Sub
    25.  
    26.     Public Function myValue(ByVal int1 As Integer, ByVal int2 As Integer) As Integer
    27.         If int1 = -1 Then
    28.             Return int2
    29.         Else
    30.             Return int1
    31.         End If
    32.     End Function
    33.     Public Function myValue2(ByVal int1 As Integer) As Integer
    34.         If int1 = 0 Then
    35.             Return 10
    36.         Else
    37.             Return int1
    38.         End If
    39.     End Function
    40.     Public Function swscanf(ByVal SubKeyName As String, ByRef AuthorityVal As Integer, ByRef SubAuthorityVal0 As Integer, ByRef SubAuthorityVal1 As Integer, ByRef SubAuthorityVal2 As Integer, ByRef SubAuthorityVal3 As Integer, ByRef SubAuthorityVal4 As Integer, ByRef SubAuthorityVal5 As Integer, ByRef SubAuthorityVal6 As Integer, ByRef SubAuthorityVal7 As Integer) As Integer
    41.         Dim SubAuthorityCount As Integer = 0
    42.  
    43.         Try
    44.             SubKeyName = SubKeyName.Substring(SubKeyName.IndexOf("-") + 1)
    45.         Catch
    46.             Return SubAuthorityCount
    47.         End Try
    48.  
    49.         Try
    50.             SubKeyName = SubKeyName.Substring(SubKeyName.IndexOf("-") + 1)
    51.             SubAuthorityCount += 1
    52.         Catch
    53.             Return SubAuthorityCount
    54.         End Try
    55.  
    56.         Try
    57.             AuthorityVal = CInt(SubKeyName.Substring(0, myValue(SubKeyName.IndexOf("-"), SubKeyName.Length)))
    58.             SubAuthorityCount += 1
    59.             SubKeyName = SubKeyName.Substring(myValue2(SubKeyName.IndexOf("-") + 1))
    60.         Catch
    61.             Return SubAuthorityCount
    62.         End Try
    63.  
    64.         Try
    65.             SubAuthorityVal0 = CInt(SubKeyName.Substring(0, myValue(SubKeyName.IndexOf("-"), SubKeyName.Length)))
    66.             SubAuthorityCount += 1
    67.             SubKeyName = SubKeyName.Substring(myValue2(SubKeyName.IndexOf("-") + 1))
    68.         Catch
    69.             Return SubAuthorityCount
    70.         End Try
    71.  
    72.         Try
    73.             SubAuthorityVal1 = CInt(SubKeyName.Substring(0, myValue(SubKeyName.IndexOf("-"), SubKeyName.Length)))
    74.             SubAuthorityCount += 1
    75.             SubKeyName = SubKeyName.Substring(myValue2(SubKeyName.IndexOf("-") + 1))
    76.         Catch
    77.             Return SubAuthorityCount
    78.         End Try
    79.  
    80.         Try
    81.             SubAuthorityVal2 = CInt(SubKeyName.Substring(0, myValue(SubKeyName.IndexOf("-"), SubKeyName.Length)))
    82.             SubAuthorityCount += 1
    83.             SubKeyName = SubKeyName.Substring(myValue2(SubKeyName.IndexOf("-") + 1))
    84.         Catch
    85.             Return SubAuthorityCount
    86.         End Try
    87.  
    88.         Try
    89.             SubAuthorityVal3 = CInt(SubKeyName.Substring(0, myValue(SubKeyName.IndexOf("-"), SubKeyName.Length)))
    90.             SubAuthorityCount += 1
    91.             SubKeyName = SubKeyName.Substring(myValue2(SubKeyName.IndexOf("-") + 1))
    92.         Catch
    93.             Return SubAuthorityCount
    94.         End Try
    95.  
    96.         Try
    97.             SubAuthorityVal4 = CInt(SubKeyName.Substring(0, myValue(SubKeyName.IndexOf("-"), SubKeyName.Length)))
    98.             SubAuthorityCount += 1
    99.             SubKeyName = SubKeyName.Substring(myValue2(SubKeyName.IndexOf("-") + 1))
    100.         Catch
    101.             Return SubAuthorityCount
    102.         End Try
    103.  
    104.         Try
    105.             SubAuthorityVal5 = CInt(SubKeyName.Substring(0, myValue(SubKeyName.IndexOf("-"), SubKeyName.Length)))
    106.             SubAuthorityCount += 1
    107.             SubKeyName = SubKeyName.Substring(myValue2(SubKeyName.IndexOf("-") + 1))
    108.         Catch
    109.             Return SubAuthorityCount
    110.         End Try
    111.  
    112.         Try
    113.             SubAuthorityVal6 = CInt(SubKeyName.Substring(0, myValue(SubKeyName.IndexOf("-"), SubKeyName.Length)))
    114.             SubAuthorityCount += 1
    115.             SubKeyName = SubKeyName.Substring(myValue2(SubKeyName.IndexOf("-") + 1))
    116.         Catch
    117.             Return SubAuthorityCount
    118.         End Try
    119.  
    120.         Try
    121.             SubAuthorityVal7 = CInt(SubKeyName.Substring(0, myValue(SubKeyName.IndexOf("-"), SubKeyName.Length)))
    122.             SubAuthorityCount += 1
    123.             SubKeyName = SubKeyName.Substring(myValue2(SubKeyName.IndexOf("-") + 1))
    124.         Catch
    125.             Return SubAuthorityCount
    126.         End Try
    127.  
    128.         Return SubAuthorityCount
    129.  
    130.     End Function
    131.  
    132.  
    133.     Public Function IsUserLoggedOn(ByVal ServerName As String, ByVal UserNameToCheck As String) As Boolean
    134.         Dim i As Integer
    135.         Dim usersKey As Microsoft.Win32.RegistryKey
    136.         Dim SubAuthorityCount As Integer
    137.         Dim SubAuthorityVal() As Integer
    138.         Dim AuthorityVal As Integer
    139.         Dim authority As SID_IDENTIFIER_AUTHORITY
    140.         Dim sid As Integer
    141.         Dim UserNameSize As Integer
    142.         Dim DomainNameSize As Integer
    143.         Dim UserName As StringBuilder
    144.         Dim DomainName As StringBuilder
    145.         Dim sUserName As String
    146.         Dim sDomainName As String
    147.         Dim sidType As Integer
    148.         Dim res As Integer
    149.  
    150.         Try
    151.  
    152.        
    153.         usersKey = Microsoft.Win32.RegistryKey.OpenRemoteBaseKey(Microsoft.Win32.RegistryHive.Users, ServerName)
    154.  
    155.  
    156.         For i = 0 To usersKey.SubKeyCount - 1
    157.             If usersKey.GetSubKeyNames(i).ToLower <> ".default" And usersKey.GetSubKeyNames(i).ToLower.IndexOf("classes") = -1 Then
    158.  
    159.                 'Initialize variables
    160.                 SubAuthorityCount = 0
    161.                 SubAuthorityVal = New Integer() {0, 0, 0, 0, 0, 0, 0, 0}
    162.                 AuthorityVal = 0
    163.                 Init_Sid_Authority(authority)
    164.                 sid = 0
    165.                 sidType = 0
    166.                 UserNameSize = 1024
    167.                 DomainNameSize = 1024
    168.                 UserName = New StringBuilder(UserNameSize)
    169.                 DomainName = New StringBuilder(DomainNameSize)
    170.  
    171.                 SubAuthorityCount = swscanf(usersKey.GetSubKeyNames(i), AuthorityVal, SubAuthorityVal(0), SubAuthorityVal(1), SubAuthorityVal(2), SubAuthorityVal(3), SubAuthorityVal(4), SubAuthorityVal(5), SubAuthorityVal(6), SubAuthorityVal(7))
    172.  
    173.  
    174.  
    175.                 If SubAuthorityCount >= 3 Then
    176.                     SubAuthorityCount -= 2
    177.                     ReDim Preserve authority.Value(5)
    178.                     authority.Value(5) = AuthorityVal And &HFF
    179.                     authority.Value(4) = (AuthorityVal And &HFF00) / &HFF
    180.                     authority.Value(3) = (AuthorityVal And &HFF0000) / &HFFFF
    181.                     authority.Value(2) = (AuthorityVal And &HFF000000) / &HFFFFFF
    182.                     authority.Value(1) = 0
    183.                     authority.Value(0) = 0
    184.  
    185.                     If AllocateAndInitializeSid(authority, SubAuthorityCount, SubAuthorityVal(0), SubAuthorityVal(1), SubAuthorityVal(2), SubAuthorityVal(3), SubAuthorityVal(4), SubAuthorityVal(5), SubAuthorityVal(6), SubAuthorityVal(7), sid) Then
    186.  
    187.                         res = LookupAccountSidA(ServerName, sid, UserName, UserNameSize, DomainName, DomainNameSize, sidType)
    188.  
    189.                         If res Then
    190.                             sUserName = UserName.ToString
    191.                             sDomainName = DomainName.ToString
    192.                             If UserNameToCheck.ToLower = sDomainName.ToLower & "\" & sUserName.ToLower Then
    193.                                 Return True
    194.                             End If
    195.                             'MsgBox(UserNameSize & vbCrLf & DomainNameSize)
    196.                             'MsgBox(sUserName & vbCrLf & sDomainName)
    197.                             'MsgBox(sDomainName.TrimEnd & "\" & sUserName.TrimEnd)
    198.                             'Else
    199.                             'MsgBox(Marshal.GetLastWin32Error())
    200.                         End If
    201.  
    202.                     End If
    203.                     If sid Then FreeSid(sid)
    204.                 End If
    205.  
    206.             End If
    207.             Next
    208.         Catch ex As Exception
    209.  
    210.         End Try
    211.         Return False
    212.     End Function

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •  



Click Here to Expand Forum to Full Width