2011-08-07 112 views
16

在我當前的C#代碼中,我能夠以編程方式鎖定Windows用戶會話(與Windows + L相同)。以編程方式解鎖Windows

由於應用程序仍然在運行,有沒有辦法從該C#程序解鎖會話。用戶憑證是已知的。該應用程序在Windows 7上運行。

+8

如果您有憑據(用戶名和密碼),您還有其他問題。 –

+1

重複http://stackoverflow.com/questions/5764174/unlock-local-computer-using-net –

+3

我的建議是不鎖定工作站。我的意思是,如果你想解鎖,那麼就不要鎖定它。 –

回答

-8

當然,你不能解鎖它。解鎖會話需要用戶身臨其境地輸入他們的賬戶憑證。即使使用保存的證書,允許軟件執行此操作也會對使用工作站鎖定的其他許多情況造成安全問題。

+0

這也是爲什麼你需要使用ctrl + alt + del –

+7

-1被授予,這是一個安全問題,但如logmein所證明的,可能的 – Will03uk

+0

這是不正確的。您可以使用自定義的憑證提供程序。 – Bemipefe

-9

不,根據設計,沒有辦法做到這一點。你的情況是什麼?爲什麼你需要鎖定/解鎖工作站?

+2

它可以在Vista和Windows 7上完成。看看logmein和臉部識別登錄;我不知道該怎麼做,雖然 – Will03uk

+1

@ Will03uk:這些都是通過編寫一個自定義的GINA DLL(它控制登錄認證過程)來完成的。 –

+1

我剛剛查閱了它,自Vista以來,GINA DLL已被憑證提供程序取代,它允許更多的靈活性和更多的一個提供程序一次 – Will03uk

-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的情況。

+0

即使我使用System.Management,也會在運行時在foreach行上獲取無效的命名空間。 – DontFretBrett

+1

問題是要解鎖窗口而不是解鎖bitlocker鎖定的驅動器 –

4

您需要自定義Windows憑據提供程序才能登錄。此外,您需要將用戶的憑據保存在某處登錄。Windows SDK中有一些示例7 https://www.microsoft.com/en-us/download/details.aspx?id=8279

有一系列項目可以幫助您在Samples\security\credentialproviders下啓動。

解鎖屏幕:

  • 設置CSampleCredential::Initialize
  • 設置自動登錄到正確的用戶名/密碼CSampleCredential::SetSelected
  • 搜索硬件提供樣品WM_TOGGLE_CONNECTED_STATUS消息,看看如何觸發登錄
  • 建立某種方式與您的應用程序進行通信以觸發解鎖(例如本地tcp服務器)

這是一個痛苦的屁股,但它的作品。