以编程方式解锁Windows

时间:2011-08-07 19:25:08

标签: c# windows login

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

由于应用程序仍在运行,有没有办法从该C#程序解锁会话。用户凭据已知。该应用程序在Windows 7上运行。

5 个答案:

答案 0 :(得分:3)

这是一些hackery:http://www.codeproject.com/Articles/16197/Remotely-Unlock-a-Windows-Workstation 不过我自己也没试过。

不适用于.NET部分,但您也可以创建自己的自定义Logon UI并在其中注入一些机制。但它很容易成为安全问题。

答案 1 :(得分:3)

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

有许多项目可以帮助您开始Samples\security\credentialproviders

解锁屏幕:

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

这对屁股很痛苦,但它确实有效。

答案 2 :(得分:-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.");
        }
    }

注意:这仅在您以管理员身份运行Visual Studio时才有效。

答案 3 :(得分:-9)

当然你无法解锁它。解锁会话需要用户在那里输入他们的帐户凭据。即使使用保存的凭据,允许软件执行此操作也会成为使用工作站锁定的许多其他情况的安全问题。

答案 4 :(得分:-9)

不,没有办法按设计做到这一点。您的场景是什么?为什么需要锁定/解锁工作站?