![](/img/trans.png)
[英]How to unlock windows 8/8.1/10 from another PC programmatically?
[英]Unlock Windows programmatically
在我当前的 C# 代码中,我能够以编程方式锁定 Windows 用户会话(与 Windows + L 相同)。
由于应用程序仍在运行,有没有办法从该 C# 程序解锁会话。 用户凭据是已知的。 该应用程序在 Windows 7 上运行。
您需要一个自定义的 Windows 凭据提供程序来为您登录。 此外,您需要将用户的凭据保存在某处才能登录。 Windows SDK 7 中有一些示例https://www.microsoft.com/en-us/download/details.aspx?id=8279
在Samples\\security\\credentialproviders
下有很多项目可以帮助您入门。
要解锁屏幕:
CSampleCredential::Initialize
设置用户名/密码CSampleCredential::SetSelected
中将 autologin 设置为 trueWM_TOGGLE_CONNECTED_STATUS
消息以查看如何触发登录这是一个痛苦的屁股,但它的工作原理。
这里有一些技巧可以做到这一点: http : //www.codeproject.com/Articles/16197/Remotely-Unlock-a-Windows-Workstation虽然我自己没有测试过。
不适用于 .NET 部分,但您也可以制作自己的自定义登录 UI 并在其中注入一些机制。 虽然它很容易成为安全问题。
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 时有效。
当然不能解锁。 解锁会话需要用户亲自到场以输入其帐户凭据。 允许软件执行此操作,即使使用已保存的凭据,对于使用工作站锁定的许多其他情况也将是一个安全问题。
不,按照设计,没有办法做到这一点。 您的情况是什么,为什么需要锁定/解锁工作站?
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.