2011-08-07 38 views
16

Trong mã C# hiện tại của tôi, tôi có thể khóa phiên người dùng Windows theo chương trình (giống như Windows + L).Mở khóa Windows theo chương trình

Vì ứng dụng sẽ vẫn chạy, có cách nào để mở khóa phiên từ chương trình C# đó hay không. Thông tin đăng nhập của người dùng được xác định. Ứng dụng đang chạy trên Windows 7.

+8

Nếu bạn có thông tin đăng nhập (tên người dùng và mật khẩu), bạn có một vấn đề khác. –

+1

Bản sao của http://stackoverflow.com/questions/5764174/unlock-local-computer-using-net –

+3

Đề xuất của tôi không phải là khóa máy trạm. Ý tôi là, nếu bạn muốn nó mở khóa sau đó chỉ cần kiềm chế khóa nó. –

Trả lời

-8

Tất nhiên bạn không thể mở khóa ứng dụng. Việc mở khóa phiên yêu cầu người dùng phải ở đó để nhập thông tin đăng nhập tài khoản của họ. Cho phép phần mềm để làm điều này, ngay cả với thông tin đăng nhập được lưu, sẽ là một vấn đề an ninh cho nhiều tình huống khác nơi khóa máy trạm được sử dụng.

+0

Đó cũng là lý do tại sao bạn cần sử dụng ctrl + alt + del –

+7

-1 được cấp, đây là vấn đề bảo mật nhưng được chứng minh bằng logmein, có thể – Will03uk

+0

Điều đó không đúng. Bạn có thể sử dụng nhà cung cấp Thông tin đăng nhập tùy chỉnh. – Bemipefe

3

Dưới đây là một số tin tặc để làm điều đó: http://www.codeproject.com/Articles/16197/Remotely-Unlock-a-Windows-Workstation Tuy nhiên, bản thân bạn không tự mình thử nghiệm.

Không dành cho phần .NET, nhưng bạn cũng có thể tạo giao diện người dùng đăng nhập tùy chỉnh của riêng mình và tiêm một số cơ chế ở đó. Nó có thể dễ dàng trở thành vấn đề an ninh mặc dù.

+1

@Alagaros cập nhật liên kết –

-9

Không, không có cách nào để thực hiện việc này, theo thiết kế. Kịch bản của bạn là gì và tại sao bạn cần phải khóa/mở khóa máy trạm?

+2

Nó có thể được thực hiện trên Vista và Windows 7 một cách dứt khoát. Nhìn vào logmein và đăng nhập nhận diện khuôn mặt; Tôi không biết làm thế nào để làm điều đó mặc dù – Will03uk

+1

@ Will03uk: Những người được thực hiện bằng cách viết một GINA DLL tùy chỉnh (kiểm soát quá trình xác thực đăng nhập). –

+1

Tôi vừa xem xét nó và kể từ Vista GINA DLL đã được thay thế bằng Nhà cung cấp thông tin xác thực cho phép linh hoạt hơn và nhiều hơn nữa thì một nhà cung cấp thời gian – 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."); 
     } 
    } 

Lưu ý: điều này chỉ hoạt động nếu bạn chạy Visual Studio với tư cách quản trị viên.

+0

nhận không gian tên không hợp lệ khi chạy trên dòng foreach mặc dù tôi đang sử dụng System.Management. – DontFretBrett

+1

Câu hỏi đặt ra là mở khóa các cửa sổ không phải về việc mở khóa ổ khóa bitlocker –

4

Bạn sẽ cần nhà cung cấp thông tin xác thực cửa sổ tùy chỉnh để đăng nhập cho bạn. Ngoài ra, bạn cần phải lưu thông tin đăng nhập của người dùng vào một nơi nào đó để đăng nhập. Có một số mẫu trong Windows SDK 7 https://www.microsoft.com/en-us/download/details.aspx?id=8279

Có một loạt dự án để giúp bạn bắt đầu theo Samples\security\credentialproviders.

Để mở khóa màn hình:

  • thiết tên người dùng/mật khẩu trong CSampleCredential::Initialize
  • bộ AutoLogin true tìm kiếm mẫu nhà cung cấp phần cứng cho WM_TOGGLE_CONNECTED_STATUS nhắn để xem làm thế nào để kích hoạt đăng nhập trong CSampleCredential::SetSelected
  • tạo một số cách để giao tiếp với ứng dụng của bạn để kích hoạt mở khóa (máy chủ tcp cục bộ chẳng hạn)

Đó là một nỗi đau trong ass, nhưng nó hoạt động.

Các vấn đề liên quan