以编程方式解锁Windows

在我目前的C#代码中,我能够以编程方式lockingWindows用户会话(与Windows + L相同)。

由于该应用程序仍然会运行,有没有什么办法解锁该C#程序的会话。 用户凭证是已知的。 该应用程序在Windows 7上运行。

这里有一些hackery这样做: http : //www.codeproject.com/Articles/16197/Remotely-Unlock-a-Windows-Workstation虽然没有自己测试。

不是.NET部分,但你也可以做你自己的自定义登录UI,并在那里注入一些机制。 尽管如此,它很容易成为安全问题。

您将需要一个自定义Windows凭据提供程序来为您登录。 此外,您需要将用户的凭据保存在某处登录。Windows SDK 7中有一些示例https://www.microsoft.com/zh-cn/download/details.aspx?id=8279

Samples\security\credentialproviders下有很多项目可供您使用。

解锁屏幕:

  • CSampleCredential::Initialize设置用户名/密码
  • CSampleCredential::SetSelected中将autologin设置为true
  • 搜索WM_TOGGLE_CONNECTED_STATUS消息的硬件提供程序示例以了解如何触发登录
  • 建立一些方式与您的应用程序通信触发解锁(例如本地tcp服务器)

这是一个痛苦的屁股,但它的作品。

  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."); } } 

注意:这仅适用于以管理员身份运行Visual Studio。

当然,你不能解锁它。 解锁会话需要用户身临其境地输入他们的账户凭证。 即使使用保存的证书,允许软件执行此操作对于使用工作站锁定的许多其他情况也是一个安全问题。

不,没有办法做到这一点,通过设计。 你的情况是什么?为什么你需要锁定/解锁工作站?