<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DZone Snippets: get code</title>
    <link>http://snippets.dzone.com/posts</link>
    <pubDate>Mon, 06 Oct 2008 15:45:02 GMT</pubDate>
    <description>DZone Snippets: get code</description>
    <item>
      <title>Get the username of the logged on user on remote machine</title>
      <link>http://snippets.dzone.com/posts/show/5465</link>
      <description>// description of your code here&lt;br /&gt;Cheats a little by getting the owner of explorer.exe to derive the logged in user. Add reference to System.Management and I think DirectoryServices&lt;br /&gt;&lt;code&gt;&lt;br /&gt;Imports System.Management&lt;br /&gt;Imports System.DirectoryServices&lt;br /&gt;Imports Microsoft.Win32&lt;br /&gt;Imports System.Runtime.InteropServices&lt;br /&gt;Module Module1&lt;br /&gt;    Dim objManagementClass As ManagementClass&lt;br /&gt;    Dim objManagementScope As ManagementScope&lt;br /&gt;    Dim objManagementBaseObject As ManagementBaseObject&lt;br /&gt;    Sub Main()&lt;br /&gt;&lt;br /&gt;        Dim WMIScope As Management.ManagementScope&lt;br /&gt;        Dim WMIConnectionOptions As New Management.ConnectionOptions&lt;br /&gt;        Dim strRootDomain As String&lt;br /&gt;        Dim objRootLDAP As DirectoryEntry&lt;br /&gt;        Dim query As ManagementObjectSearcher&lt;br /&gt;        Dim queryCollection As ManagementObjectCollection&lt;br /&gt;        Dim oq As New System.Management.ObjectQuery&lt;br /&gt;        Dim mo As New ManagementObject&lt;br /&gt;        Dim UserDomain As String&lt;br /&gt;        Dim UserID As String&lt;br /&gt;        Dim StrLoggedUserSID() As Byte&lt;br /&gt;&lt;br /&gt;        Dim Strcomputer As String = My.Application.CommandLineArgs.Item(0)&lt;br /&gt;        'Console.WriteLine(Strcomputer)&lt;br /&gt;&lt;br /&gt;        With WMIConnectionOptions&lt;br /&gt;            .Impersonation = System.Management.ImpersonationLevel.Impersonate&lt;br /&gt;            .Authentication = System.Management.AuthenticationLevel.Packet&lt;br /&gt;&lt;br /&gt;        End With&lt;br /&gt;&lt;br /&gt;        WMIScope = New Management.ManagementScope("\\" &amp; _&lt;br /&gt;        strcomputer &amp; "\root\cimv2", WMIConnectionOptions)&lt;br /&gt;&lt;br /&gt;        objRootLDAP = New DirectoryEntry("LDAP://RootDSE")&lt;br /&gt;        strRootDomain = objRootLDAP.Properties.Item("rootDomainNamingContext").Value.ToString&lt;br /&gt;&lt;br /&gt;        oq = New System.Management.ObjectQuery("SELECT * from Win32_process Where Name='explorer.exe' and SessionID=0")&lt;br /&gt;        query = New ManagementObjectSearcher(WMIScope, oq)&lt;br /&gt;        queryCollection = query.Get()&lt;br /&gt;&lt;br /&gt;        If queryCollection.Count = 0 Then&lt;br /&gt;            Console.WriteLine("No user logged on")&lt;br /&gt;            Exit Sub&lt;br /&gt;        Else&lt;br /&gt;&lt;br /&gt;            Dim strKeyPath As String = "SOFTWARE\Microsoft\Windows NT\CurrentVersion\WinLogon"&lt;br /&gt;            objManagementScope = New ManagementScope&lt;br /&gt;            objManagementScope.Path.Server = strcomputer&lt;br /&gt;            objManagementScope.Path.NamespacePath = "root\default"&lt;br /&gt;            objManagementScope.Options.EnablePrivileges = True&lt;br /&gt;            objManagementScope.Options.Impersonation = ImpersonationLevel.Impersonate&lt;br /&gt;            objManagementScope.Connect()&lt;br /&gt;&lt;br /&gt;            objManagementClass = New ManagementClass("stdRegProv")&lt;br /&gt;            objManagementClass.Scope = objManagementScope&lt;br /&gt;            objManagementBaseObject = objManagementClass.GetMethodParameters("EnumValues")&lt;br /&gt;            objManagementBaseObject.SetPropertyValue("hDefKey", CType("&amp;H" &amp; Hex(RegistryHive.LocalMachine), Long))&lt;br /&gt;            objManagementBaseObject.SetPropertyValue("sSubKeyName", strKeyPath)&lt;br /&gt;&lt;br /&gt;            UserDomain = CStr(GetRegValues("DefaultDomainName", strKeyPath, "HKLM"))&lt;br /&gt;            UserID = CStr(GetRegValues("DefaultUserName", strKeyPath, "HKLM"))&lt;br /&gt;&lt;br /&gt;            Console.WriteLine(UserID)&lt;br /&gt;&lt;br /&gt;            'If the SID or the full name is needed sometime in the future the code is below&lt;br /&gt;&lt;br /&gt;            'If UCase(UserDomain) = UCase(strcomputer) Then&lt;br /&gt;            'Console.WriteLine("Logged on user = " &amp; UserDomain &amp; "\" &amp; UserID &amp; " (local user)")&lt;br /&gt;            'Exit Sub&lt;br /&gt;            'End If&lt;br /&gt;&lt;br /&gt;            'Dim LdapBind As String&lt;br /&gt;            'LdapBind = ("LDAP://" &amp; strRootDomain)&lt;br /&gt;&lt;br /&gt;            'Dim deEntry3 As New DirectoryEntry(LdapBind)&lt;br /&gt;            'Dim DSearch As New DirectorySearcher(deEntry3)&lt;br /&gt;&lt;br /&gt;            'With DSearch&lt;br /&gt;            '    .SearchScope = SearchScope.Subtree&lt;br /&gt;            '    .Filter = "(&amp;(objectclass=user)(sAMAccountName=" &amp; UserID &amp; "))"&lt;br /&gt;            '    .PropertiesToLoad.Add("name")&lt;br /&gt;            '    .PropertiesToLoad.Add("sAMAccountName")&lt;br /&gt;            '    .PropertiesToLoad.Add("distinguishedName")&lt;br /&gt;            'End With&lt;br /&gt;&lt;br /&gt;            'Dim sResultSet As SearchResult&lt;br /&gt;&lt;br /&gt;            'For Each sResultSet In DSearch.FindAll()&lt;br /&gt;&lt;br /&gt;            '    If UCase(GetProperty(sResultSet, "sAMAccountName")) = UCase(UserID) Then&lt;br /&gt;&lt;br /&gt;            '        Console.WriteLine("Logged on user = " &amp; GetProperty(sResultSet, "name") &amp; " (as " &amp; _&lt;br /&gt;            '        UserDomain &amp; "\" &amp; UserID &amp; ")")&lt;br /&gt;&lt;br /&gt;            '        Dim deEntry4 As New DirectoryEntry("LDAP://" &amp; GetProperty(sResultSet, "distinguishedName").ToString)&lt;br /&gt;            '        StrLoggedUserSID = CType(deEntry4.Properties("objectSid").Value, Byte())&lt;br /&gt;            '        Console.WriteLine("User's SID = " &amp; ConvertSid(StrLoggedUserSID))&lt;br /&gt;            '    End If&lt;br /&gt;            'Next&lt;br /&gt;&lt;br /&gt;        End If&lt;br /&gt;    End Sub&lt;br /&gt;&lt;br /&gt;    Public Function GetProperty(ByVal srSearchResult As SearchResult, ByVal strPropertyName As String) As String&lt;br /&gt;        If srSearchResult.Properties.Contains(strPropertyName) Then&lt;br /&gt;            Return srSearchResult.Properties(strPropertyName)(0).ToString()&lt;br /&gt;        Else&lt;br /&gt;            Return String.Empty&lt;br /&gt;        End If&lt;br /&gt;    End Function&lt;br /&gt;    Private Function GetRegValues(ByVal regkeyValue As String, ByVal regkey As String, ByVal Hive As String)&lt;br /&gt;&lt;br /&gt;        Select Case Hive&lt;br /&gt;            Case "HKLM"&lt;br /&gt;                Hive = CStr(RegistryHive.LocalMachine)&lt;br /&gt;            Case "HKU"&lt;br /&gt;                Hive = CStr(RegistryHive.Users)&lt;br /&gt;            Case "HKCU"&lt;br /&gt;                Hive = CStr(RegistryHive.CurrentUser)&lt;br /&gt;            Case "HKCR"&lt;br /&gt;                Hive = CStr(RegistryHive.ClassesRoot)&lt;br /&gt;        End Select&lt;br /&gt;&lt;br /&gt;        objManagementBaseObject = objManagementClass.GetMethodParameters("GetStringValue")&lt;br /&gt;        objManagementBaseObject.SetPropertyValue("hDefKey", CType("&amp;H" &amp; Hex(Hive), Long))&lt;br /&gt;        objManagementBaseObject.SetPropertyValue("sSubKeyName", regkey)&lt;br /&gt;        objManagementBaseObject.SetPropertyValue("sValueName", regkeyValue)&lt;br /&gt;        objManagementBaseObject = objManagementClass.InvokeMethod("GetStringValue", objManagementBaseObject, Nothing)&lt;br /&gt;        GetRegValues = objManagementBaseObject("sValue")&lt;br /&gt;&lt;br /&gt;    End Function&lt;br /&gt;&lt;br /&gt;    Public Function ConvertSid(ByVal sid As Byte()) As String&lt;br /&gt;&lt;br /&gt;        Dim sidString As String&lt;br /&gt;        Dim sidPtr As IntPtr&lt;br /&gt;        Dim sidStringPtr As IntPtr&lt;br /&gt;        Dim res As Integer&lt;br /&gt;&lt;br /&gt;        sidPtr = Marshal.AllocHGlobal(sid.Length)&lt;br /&gt;        Marshal.Copy(sid, 0, sidPtr, sid.Length)&lt;br /&gt;        res = ConvertSidToStringSid(sidPtr, sidStringPtr)&lt;br /&gt;        If res = 0 Then&lt;br /&gt;            Throw New System.ComponentModel.Win32Exception(Marshal.GetLastWin32Error())&lt;br /&gt;        End If&lt;br /&gt;        sidString = Marshal.PtrToStringAuto(sidStringPtr)&lt;br /&gt;        Marshal.FreeHGlobal(sidPtr)&lt;br /&gt;        Marshal.FreeHGlobal(sidStringPtr)&lt;br /&gt;&lt;br /&gt;        Return sidString&lt;br /&gt;&lt;br /&gt;    End Function&lt;br /&gt;&lt;br /&gt;    &lt;DllImport("advapi32.dll", CharSet:=CharSet.Auto, SetLastError:=True)&gt; _&lt;br /&gt;    Private Function ConvertSidToStringSid(ByVal pSID As IntPtr, ByRef pSidString As IntPtr) As Integer&lt;br /&gt;    End Function&lt;br /&gt;&lt;br /&gt;End Module&lt;br /&gt;&lt;/code&gt;</description>
      <pubDate>Mon, 05 May 2008 20:43:57 GMT</pubDate>
      <guid>http://snippets.dzone.com/posts/show/5465</guid>
      <author>mellerbeck (Michael Ellerbeck)</author>
    </item>
  </channel>
</rss>
