Tuesday, March 1, 2011

Terminal Services: Get Client Name While Running As Administrator

Under normal circumstances, a VB.NET application of mine can check the ClientName environmental variable to get the name of the workstation the user is connecting from.

So when WorkstationX RDPs into ServerA:

  • ComputerName=ServerA
  • ClientName=WorkstationX

That works fine.

If I right-click on the application and choose Run As Administrator, the ClientName variable is not set.

Does anyone know of a way of easily getting the workstation name of the client connected to the terminal server, even when the application is launched via "Run As Administrator"?

From stackoverflow
  • The terminal services API might be your answer. I use it in a VB.NET app to log off user sessions on a given server, and to retrieve the names of the workstations connected to those sessions. The code I have has a lot of p-invoke stuff and is rather unwieldy, but I can post it if you want.

    Kevin Fairchild : I assumed I would need to use WTSQuerySessionInformation to get to the value of WTSClientName, but haven't found any clean examples of doing so yet.
    Chris Tybur : Clean as in working, or as in straightforward?
    Kevin Fairchild : Clean as in working and minimal use of sketchy calls using ported VB6 code ;)
  • If you don't want to deal with the P/Invoke business yourself, you can use Cassia, which wraps it for you:

    New Cassia.TerminalServicesManager().CurrentSession.ClientName
    

0 comments:

Post a Comment