Разблокировать Windows программно - PullRequest
17 голосов
/ 07 августа 2011

В моем текущем коде C # я могу программно заблокировать сеанс пользователя Windows (так же, как Windows + L).

Так как приложение все еще будет работать, есть ли способ разблокировать сеанс изэта программа на C #.Учетные данные пользователя известны.Приложение работает на Windows 7.

Ответы [ 5 ]

3 голосов
/ 03 февраля 2016

Для входа в систему вам понадобится пользовательский поставщик учетных данных Windows. Кроме того, вам необходимо сохранить учетные данные пользователя для входа в систему. В Windows SDK есть несколько примеров 7 https://www.microsoft.com/en-us/download/details.aspx?id=8279

Существует множество проектов, которые помогут вам начать работу под Samples\security\credentialproviders.

Чтобы разблокировать экран:

  • установить имя пользователя / пароль в CSampleCredential::Initialize
  • установить для автологина значение true в CSampleCredential::SetSelected
  • найдите в образце поставщика оборудования сообщение WM_TOGGLE_CONNECTED_STATUS, чтобы узнать, как вызвать вход в систему
  • создать способ связи с вашим приложением для запуска разблокировки (например, локальный tcp-сервер)

Это боль в заднице, но она работает.

3 голосов
/ 07 августа 2011

Вот несколько способов сделать это: http://www.codeproject.com/Articles/16197/Remotely-Unlock-a-Windows-Workstation Хотя сам не проверял.

Не для .NET-части, но вы также можете создать свой собственный пользовательский интерфейс входа в систему и внедрить какой-то механизм там. Это может легко стать проблемой безопасности.

0 голосов
/ 02 мая 2014
    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 от имени администратора.

0 голосов
/ 07 августа 2011

Нет, умышленно сделать это невозможно. Каков ваш сценарий и почему вам нужно заблокировать / разблокировать рабочую станцию?

0 голосов
/ 07 августа 2011

Конечно, вы не можете его разблокировать.Разблокировка сеанса требует, чтобы пользователь физически присутствовал там для ввода учетных данных своей учетной записи.Разрешение программному обеспечению делать это, даже с сохраненными учетными данными, было бы проблемой безопасности для многих других ситуаций, когда используется блокировка рабочей станции.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...