以编程方式解锁Windows

24

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

由于应用程序仍在运行,是否有任何方法可以从C#程序解锁会话? 用户凭据已知。 该应用程序正在运行Windows 7上。


10
如果你拥有凭据(用户名和密码),那么你会面临另一个问题。 - Emond
1
使用.NET解锁本地计算机的副本 - Ivan Danilov
3
我的建议是不要锁定工作站。我的意思是,如果你想让它解锁,就不要锁定它。 - David Heffernan
1
出于好奇,您能解释一下为什么您希望会话自动解锁吗?有什么用例吗? - ceztko
5个回答

7
您需要一个自定义的Windows凭证提供程序来为您登录。另外,您需要将用户的凭据保存在某个地方以便登录。在Windows SDK 7中有一些示例可以帮助您入门。具体链接是:https://www.microsoft.com/en-us/download/details.aspx?id=8279 在“Samples\security\credentialproviders”下有一系列项目可供您使用。
要解锁屏幕,请按照以下步骤进行:
1. 在“CSampleCredential::Initialize”中设置用户名/密码; 2. 在“CSampleCredential::SetSelected”中将自动登录设置为true; 3. 查找硬件提供程序示例中的“WM_TOGGLE_CONNECTED_STATUS”消息,以了解如何触发登录; 4. 建立某种通信方式与您的应用程序通信,以触发解锁(例如使用本地TCP服务器)。
这可能会有些麻烦,但它能够正常工作。

我想让这个解决方案在Windows 10上运行,但我的Windows技能有些生疏。如果您有兴趣在此处进行一些咨询工作,请通过我的个人资料页面上的网站与我联系。 - davidgyoung

5

-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时才有效。


尽管我正在使用System.Management,但在foreach行上运行时仍然出现无效的命名空间。 - DontFretBrett
4
这个问题是关于解锁Windows而不是解锁被BitLocker锁定的驱动器。 - Laxmikant Dange

-13

不,根据设计,无法这样做。您的情况是什么,为什么需要锁定/解锁工作站?


3
可以在Windows Vista和Windows 7上完成。看看LogMeIn和人脸识别登录;但我不知道如何做。 - Will03uk
1
@Will03uk:这些是通过编写自定义的GINA DLL(控制登录认证过程)来完成的。 - Greg Hewgill
1
我刚查了一下,自从Vista以来,GINA DLL已被替换为凭据提供程序,这允许更多的灵活性和同时使用多个提供程序。 - Will03uk
这不是真的。你可以使用自定义凭据提供程序。 - Bemipefe

-14

当然你无法解锁它。解锁一个会话需要用户亲自在现场输入他们的帐户凭据。即使使用保存的凭据,允许软件这样做也将成为许多使用工作站锁定的其他情况的安全问题。


这也是为什么你需要使用ctrl+alt+del的原因。 - Oskar Kjellin
9
-1 虽然这是一个安全问题,但正如LogMeIn所证明的那样,它是可能的。 - Will03uk
这不是真的。你可以使用自定义凭据提供程序。 - Bemipefe

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接