|
|
Subject:
Win32: Determine if current user logged in from console or remote desktop?
Category: Computers > Programming Asked by: vichoty-ga List Price: $2.00 |
Posted:
01 Jul 2005 15:46 PDT
Expires: 31 Jul 2005 15:46 PDT Question ID: 539229 |
Hi, What is the way with win32 to determine whether if a current user being logged in has logged in through console user or through remote desktop? I am using the following mechanism to find out the current logged in user SID: . get the desktop window (e.g. explorer.exe) . get its process ID . use OpenProcessToken and GetTokenInformation to retreive the SID of the desktop window's owner The above would work with both cases, which I am looking to tell the difference. Thanks Victor |
|
There is no answer at this time. |
|
Subject:
Re: Win32: Determine if current user logged in from console or remote desktop?
From: dkorber-ga on 07 Jul 2005 04:19 PDT |
This script tells you if you are running under a TS Session or not: Dim Sh, Clientname, Computername Set Sh = WScript.CreateObject("WScript.Shell") Clientname = UCase(Sh.ExpandEnvironmentStrings("%Clientname%")) Computername = UCase(Sh.ExpandEnvironmentStrings("%Computername%")) If (Clientname <> "%CLIENTNAME%") And (Clientname <> Computername) Then IsTSSession = True Else IsTSSession = False End If If IsTSSession Then WScript.Echo "This is a Terminal Services session" Else WScript.Echo "This is NOT a Terminal Services session" End If |
Subject:
Re: Win32: Determine if current user logged in from console or remote desktop?
From: coolchap_here-ga on 19 Jul 2005 06:46 PDT |
Hi, You can use WMI to get the logged in user's SID as follows: {save the following code as test.vbs} This script will return the logged in user name and his SID. Dim strComputer : strComputer = "." Dim objWMIService : Set objWMIService = GetObject("winmgmts:" & _ "{impersonationLevel=impersonate}!\\" & _ strComputer & "\Root\CIMV2") msgbox "Currently logged in user is: " & strGetLoggedOnUserAccount() msgbox "SID of logged in user is : " & getSIDOfLoogedInUser() Function strGetLoggedOnUserAccount() Dim colProcesses Dim objProcess Dim strUser Dim strDomain Dim strAccount Dim lReturn On Error Resume Next Set colProcesses = objWMIService.ExecQuery _ ("Select name from Win32_Process Where Name = 'explorer.exe' AND SessionId = 0") strUser = "" strDomain = "" For Each objProcess In colProcesses lReturn = objProcess.GetOwner(strUser, strDomain) If lReturn = 0 Then strAccount = strDomain & "\" & strUser End If Next If strAccount <> "" Then strGetLoggedOnUserAccount = strAccount Else MsgBox ("Unexpected error") Call WScript.Quit(1) End If On Error Goto 0 End Function Function getSIDOfLoogedInUser() On Error Resume Next Dim strUserName Dim objSID Dim objRegistry Dim strComputer Dim lngRtn Dim strSID Dim arrRegKeys Const HKLM = &H80000002 strComputer = "." getSIDOfLoogedInUser = "" 'get the current logged in user name with domain strUserName = strGetLoggedOnUserAccount() 'obtain the SID for the current logged in user Set objRegistry=GetObject("winmgmts:{impersonationLevel=impersonate}!\\" _ & strComputer & "\root\default:StdRegProv") lngRtn = objRegistry.EnumKey(HKLM, "SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProfileList", arrRegKeys) If lngRtn = 0 Then For Each strSID In arrRegKeys Set objSID = objWMIService.Get("Win32_SID='" & strSID & "'") If UCase(objSID.ReferencedDomainName & "\" & objSID.AccountName) = UCase(strUserName) Then getSIDOfLoogedInUser = strSID End If Next End If On Error Goto 0 End Function |
If you feel that you have found inappropriate content, please let us know by emailing us at answers-support@google.com with the question ID listed above. Thank you. |
Search Google Answers for |
Google Home - Answers FAQ - Terms of Service - Privacy Policy |