2011-08-07 25 views
16

En mi código actual de C# puedo bloquear una sesión de usuario de Windows mediante programación (igual que Windows + L).Desbloquear Windows programáticamente

Dado que la aplicación aún se estaría ejecutando, ¿hay alguna manera de desbloquear la sesión de ese programa C#. Las credenciales del usuario son conocidas. La aplicación se ejecuta en Windows 7.

+8

Si tiene las credenciales (nombre de usuario y contraseña), tiene otro problema. –

+1

Duplicado de http://stackoverflow.com/questions/5764174/unlock-local-computer-using-net –

+3

Mi recomendación es no bloquear la estación de trabajo. Quiero decir, si quieres que se desbloquea, entonces simplemente abstente de bloquearlo. –

Respuesta

-8

Por supuesto que no puedes desbloquearlo. Para desbloquear una sesión, el usuario debe estar físicamente allí para ingresar sus credenciales de cuenta. Permitir que el software haga esto, incluso con las credenciales guardadas, sería un problema de seguridad para muchas de las otras situaciones donde se usa el bloqueo de la estación de trabajo.

+0

Cuál es también la razón por la que necesita usar ctrl + alt + del –

+7

-1 concedido, es un problema de seguridad, pero como lo demostró logmein, es posible – Will03uk

+0

Eso no es cierto. Puede usar un proveedor de credenciales personalizado. – Bemipefe

-9

No, no hay forma de hacerlo, por diseño. ¿Cuál es su situación y por qué necesita bloquear/desbloquear la estación de trabajo?

+2

Se puede hacer en Vista y Windows 7 desafiante. Mire los inicios de sesión de logmein y face; No sé cómo hacerlo, aunque – Will03uk

+1

@ Will03uk: se realizan al escribir una DLL GINA personalizada (que controla el proceso de autenticación de inicio de sesión). –

+1

Acabo de buscarlo y desde Vista, la DLL GINA ha sido reemplazada por proveedores de credenciales, lo que permite más flexibilidad y más de un proveedor por vez – Will03uk

-2
var path = new ManagementPath(); 
    path.NamespacePath = "\\ROOT\\CIMV2\\Security\\MicrosoftVolumeEncryption"; path.ClassName = "Win32_EncryptableVolume"; 

    var scope = new ManagementScope(path, new ConnectionOptions() { Impersonation = ImpersonationLevel.Impersonate }); 

    var management = new ManagementClass(scope, path, new ObjectGetOptions()); 

    foreach (ManagementObject vol in management.GetInstances()) 
    { 

     Console.WriteLine("----" + vol["DriveLetter"]); 
     switch ((uint)vol["ProtectionStatus"]) 
     { 
      case 0: 
       Console.WriteLine("not protected by bitlocker"); 
       break; 
      case 1: 
       Console.WriteLine("unlocked"); 
       break; 
      case 2: 
       Console.WriteLine("locked"); 
       break; 
     } 

     if ((uint)vol["ProtectionStatus"] == 2) 
     { 
      Console.WriteLine("unlock this driver ..."); 

      vol.InvokeMethod("UnlockWithPassphrase", new object[] { "here your pwd" }); 

      Console.WriteLine("unlock done."); 
     } 
    } 

Nota: esto solo funciona si ejecuta Visual Studio como administrador.

+0

obteniendo espacio de nombre no válido en tiempo de ejecución en la línea foreach aunque estoy usando System.Management. – DontFretBrett

+1

La pregunta es acerca de desbloquear Windows, no de desbloquear las unidades bloqueadas de Bitlocker –

4

Necesitará un proveedor de credenciales de Windows personalizado para iniciar sesión por usted. Además, deberá guardar las credenciales del usuario en algún lugar para iniciar sesión. Hay algunas muestras en Windows SDK 7 https://www.microsoft.com/en-us/download/details.aspx?id=8279

Hay un montón de proyectos para comenzar bajo Samples\security\credentialproviders.

para desbloquear la pantalla:

  • establecer el nombre de usuario/contraseña en CSampleCredential::Initialize
  • conjunto de sesión automático en true en CSampleCredential::SetSelected
  • buscar la muestra proveedor de hardware para WM_TOGGLE_CONNECTED_STATUS de mensajes para ver cómo activar el inicio de sesión
  • construye alguna forma de comunicarse con tu aplicación para activar el desbloqueo (servidor tcp local, por ejemplo)

Es un dolor en el trasero, pero funciona.

Cuestiones relacionadas