2010-01-25 22 views
8

Estoy tratando de crear una utilidad similar a Super Fast User Switcher (download), que permite el cambio rápido de usuario sin pasar por la pantalla de bienvenida.Crear una sesión de inicio de sesión interactiva

tengo una implementación funcional usando los indocumentados WinStationConnectW API (junto con WTSEnumerateSessions), pero sólo puede cambiar a un usuario que ya ha iniciado la sesión.

¿Cómo puedo crear una sesión de inicio de sesión para que pueda cambiar a un usuario que no ha iniciado sesión?
Solo necesito compatibilidad con XP, aunque sería bueno trabajar con Vista/Seven. (Mi código actual ya lo hace)

Sé que esto es posible porque Super Fast User Switcher lo hace. (Aunque necesita un servicio de Windows para hacerlo)

Estoy escribiendo C#, pero puedo traducir cualquier respuesta en C#.

+0

¿Has probado P/Invoking LogonUser? –

+0

@nobugz: 'LogonUser' crea un token de usuario, no una sesión de inicio de sesión. Ya lo estoy usando para verificar contraseñas. – SLaks

+1

Dado que otros grupos hacen un trabajo similar con cosas como Citrix o GotoMyPC, creo que esto sería factible. Sin embargo, pueden estar haciendo algo en su propio servicio, así que no estoy seguro. – jcolebrand

Respuesta

4

Lo resolví en XP llamando a la función InitiateInteractiveLogon no documentada en el objeto COM ShellLocalMachine en shgina.dll.

Este método, que solo puede ser llamado por la cuenta del sistema local, registrará a un usuario en la consola. (No puede registrar a un usuario en una sesión RDP)

La versión de la DLL incluida con Windows 7 (y presumiblemente también Vista) no contiene este método.

+2

Esta función también está sin documentar que no tiene ningún resultado de búsqueda de Google. (Google aún no ha indexado esta respuesta) http://www.google.com/search?q=shgina.dll+ShellLocalMachine+%2BInitiateInteractiveLogon – SLaks

0

¿A qué versiones de Windows desea apuntar?

Creo que no hay una manera simple. Para Windows XP, hay GINA. Para Windows Vista, hay 'Proveedores de credenciales'.

Además, si su objetivo es Windows XP, puede crear un servicio que envíe pulsaciones de teclas al escritorio de WinLogon para iniciar sesión como si el usuario las presionara en el teclado. Esto fue hecho por RealVNC o UltraVNC, no lo recuerdo. Sin embargo, este enfoque no funciona en Windows Vista.

+0

GINA está fuera de cuestión porque es (por alguna razón) incompatible con el cambio rápido de usuario. – SLaks

Cuestiones relacionadas