Разблокировать Windows программно
В моем текущем коде С# я могу программно заблокировать сеанс пользователя Windows (так же, как Windows + L).
Поскольку приложение все равно будет работать, есть ли способ разблокировать сеанс из этой программы на С#. Учетные данные пользователя известны. Приложение работает в Windows 7.
Ответы
Ответ 1
Вот некоторые хакеры для этого: http://www.codeproject.com/Articles/16197/Remotely-Unlock-a-Windows-Workstation
Не проверял сам, хотя.
Не для части .NET, но вы также можете создать свой собственный пользовательский интерфейс входа в систему и вставить туда какой-то механизм. Это может легко стать проблемой безопасности.
Ответ 2
Для входа в систему вам понадобится собственный поставщик учетных данных Windows. Кроме того, вам нужно будет сохранить учетные данные пользователя для входа в систему. В Windows SDK 7 есть несколько примеров < https://www.microsoft.com/en-us/download/details.aspx?id=8279
Там есть куча проектов, которые помогут вам начать работу под Samples\security\credentialproviders
.
Чтобы разблокировать экран:
- установить имя пользователя/пароль в
CSampleCredential::Initialize
- установить autologin в true в
CSampleCredential::SetSelected
- найдите образец поставщика оборудования для сообщения
WM_TOGGLE_CONNECTED_STATUS
, чтобы узнать, как вызвать логин
- создайте способ связи с вашим приложением, чтобы запустить разблокировку (например, локальный сервер tcp)
Это боль в заднице, но она работает.
Ответ 3
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 в качестве администратора.
Ответ 4
Конечно, вы не можете разблокировать его. Разблокировка сеанса требует, чтобы пользователь физически был там, чтобы ввести учетные данные своей учетной записи. Разрешение программного обеспечения для этого, даже с сохраненными учетными данными, будет проблемой безопасности для многих других ситуаций, в которых используется блокировка рабочей станции.
Ответ 5
Нет, нет никакого способа сделать это, по дизайну. Какой ваш сценарий и зачем вам нужно блокировать/разблокировать рабочую станцию?