2011-08-07 5 views
16

Dans mon code C# actuel, je peux verrouiller une session utilisateur Windows par programme (identique à Windows + L).Déverrouiller Windows par programme

Étant donné que l'application est toujours en cours d'exécution, est-il possible de déverrouiller la session à partir de ce programme C#. Les informations d'identification de l'utilisateur sont connues. L'application fonctionne sous Windows 7.

+8

Si vous avez les informations d'identification (nom d'utilisateur et mot de passe), vous avez un autre problème. –

+1

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

+3

Ma recommandation n'est pas de verrouiller le poste de travail. Je veux dire, si vous voulez le déverrouiller, il vous suffit de ne pas le verrouiller. –

Répondre

-8

Bien sûr, vous ne pouvez pas le déverrouiller. Le déverrouillage d'une session nécessite que l'utilisateur soit physiquement présent pour entrer les informations d'identification de son compte. Autoriser les logiciels à le faire, même avec des informations d'identification enregistrées, constituerait un problème de sécurité pour la plupart des autres situations dans lesquelles le verrouillage du poste de travail est utilisé.

+0

Ce qui est aussi pourquoi vous devez utiliser ctrl + alt + del –

+7

-1 accordé, c'est un problème de sécurité mais comme prouvé par logmein, possible – Will03uk

+0

Ce n'est pas vrai. Vous pouvez utiliser un fournisseur d'informations d'identification personnalisé. – Bemipefe

3

Voici un peu de hackery pour le faire: http://www.codeproject.com/Articles/16197/Remotely-Unlock-a-Windows-Workstation Je ne l'ai pas testé moi-même.

Non pour la partie .NET, mais vous pouvez également créer votre propre interface d'ouverture de session personnalisée et y injecter un mécanisme. Cela peut facilement devenir un problème de sécurité.

+1

@Alagaros mis à jour le lien –

-9

Non, il n'y a aucun moyen de le faire, par conception. Quel est votre scénario et pourquoi avez-vous besoin de verrouiller/déverrouiller le poste de travail?

+2

Il peut être fait sur Vista et Windows 7 avec défi. Regardez les logins et les logins de reconnaissance de visages; Je ne sais pas comment le faire si – Will03uk

+1

@ Will03uk: Ceux-ci sont fait en écrivant une DLL GINA personnalisée (qui contrôle le processus d'authentification de connexion). –

+1

Je viens de chercher et depuis Vista la DLL GINA a été remplacée par Credential Providers qui permet plus de flexibilité et plus d'un fournisseur un temps – 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."); 
     } 
    } 

Remarque: cela ne fonctionne que si vous exécutez Visual Studio en tant qu'administrateur.

+0

obtenir un espace de noms invalide à l'exécution sur la ligne foreach même si j'utilise System.Management. – DontFretBrett

+1

La question est sur le point de déverrouiller les fenêtres et non sur le déverrouillage des lecteurs verrouillés Bitlocker –

4

Vous devez disposer d'un fournisseur d'informations d'identification Windows personnalisé pour vous connecter. En outre, vous devrez enregistrer les informations d'identification de l'utilisateur quelque part pour vous connecter. Il existe quelques exemples dans Windows SDK 7 https://www.microsoft.com/en-us/download/details.aspx?id=8279

Il existe de nombreux projets pour vous lancer sous Samples\security\credentialproviders.

Pour déverrouiller l'écran:

  • définir le nom d'utilisateur/mot de passe dans CSampleCredential::Initialize
  • ensemble autologin à true dans CSampleCredential::SetSelected
  • recherche l'échantillon de fournisseur de matériel pour WM_TOGGLE_CONNECTED_STATUS un message pour voir comment déclencher la connexion
  • construire un moyen de communiquer avec votre application pour déclencher le déverrouillage (serveur tcp locale par exemple)

C'est une douleur dans le cul, mais cela fonctionne.

Questions connexes