Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Create an interactive logon session

I'm trying to create a utility similar to Microsoft's abandoned Super Fast User Switcher (download), which allows fast user switching without going through the Welcome screen.

I have a working implementation using the undocumented WinStationConnectW API (along with WTSEnumerateSessions), but it can only switch to a user who is already logged in.

How can I create a login session so that it can switch to a user who is not logged in?
I only need to support XP, although it'd be nice to work on Vista / Seven. (My current code already does)

I know that this is possible because Super Fast User Switcher does it. (Although it needs a Windows service to do it)

I'm writing C#, but I can translate any answer into C#.

like image 830
SLaks Avatar asked Jan 25 '10 17:01

SLaks


1 Answers

I solved this in XP by calling the undocumented InitiateInteractiveLogon function in the ShellLocalMachine COM object in shgina.dll.

This method, which can only be called by the Local System account, will log a user on to the console. (It cannot log a user on to an RDP session)

The version of the DLL included with Windows 7 (and presumably also Vista) does not contain this method.

like image 143
SLaks Avatar answered Sep 30 '22 10:09

SLaks