【问题标题】:Detect BitLocker programmatically from c# without admin在没有管理员的情况下从 c# 以编程方式检测 BitLocker
【发布时间】:2016-12-23 21:53:07
【问题描述】:

从各种线程中,我拼凑出如何像这样以编程方式检查 BitLocker:

private void TestBitLockerMenuItem_Click(object sender, RoutedEventArgs e) {
   var path=new ManagementPath(@"\ROOT\CIMV2\Security\MicrosoftVolumeEncryption")
               { ClassName="Win32_EncryptableVolume" };
   var scope=new ManagementScope(path);
   path.Server=Environment.MachineName;
   var objectSearcher=new ManagementClass(scope, path, new ObjectGetOptions());
   foreach (var item in objectSearcher.GetInstances()) {
      MessageBox.Show(item["DeviceID"].ToString()+" "+item["ProtectionStatus"].ToString());
   }
}

但它只有在进程具有管理员权限时才有效。

任何老 Windows 用户都可以转到资源管理器,右键单击驱动器并查看它是否已打开 BitLocker,这似乎很奇怪,但程序似乎无法完成此操作。有谁知道这样做的方法吗?

【问题讨论】:

  • 只有系统盘?还是您还需要检查其他驱动器?
  • 最好是任何驱动器,但我可以使用系统驱动器。
  • 现在无关紧要,因为我知道如何检查任何驱动器。

标签: c# bitlocker


【解决方案1】:

Windows 通过使用 Win32 API 中的 Windows Property System 检查未记录的 shell 属性 System.Volume.BitLockerProtection 在 shell 中显示此内容。您的程序也可以在没有海拔的情况下检查此属性。

如果此属性的值为 1、3 或 5,则在驱动器上启用 BitLocker。任何其他值都被视为关闭。

在寻找此问题的解决方案期间,我在HKEY_CLASSES_ROOT\Drive\shell\manage-bde\AppliesTo 中找到了对此 shell 属性的引用。最终,这一发现将我引向了这个解决方案。

Windows 属性系统是一个低级 API,但您可以使用 Windows API Code Pack 中提供的包装器。

Install-Package WindowsAPICodePack

使用

using Microsoft.WindowsAPICodePack.Shell;
using Microsoft.WindowsAPICodePack.Shell.PropertySystem;

代码

IShellProperty prop = ShellObject.FromParsingName("C:").Properties.GetProperty("System.Volume.BitLockerProtection");
int? bitLockerProtectionStatus = (prop as ShellProperty<int?>).Value;

if (bitLockerProtectionStatus.HasValue && (bitLockerProtectionStatus == 1 || bitLockerProtectionStatus == 3 || bitLockerProtectionStatus == 5))
   Console.WriteLine("ON");
else
   Console.WriteLine("OFF");

【讨论】:

  • 这在调试时运行良好,但在 Windows 服务中运行时失败。服务在哪个用户下运行并不重要:本地系统、本地服务或管理员帐户。知道可能是什么问题或解决方法吗?
  • 感谢您的出色回答。不过有一点。在我的 Windows 10 (2004) PC 上,受 BitLocker 保护且仍处于锁定状态的驱动器返回的“bitLockerProtectionStatus”为 6。
  • 任何人都可以提供不同值的含义列表以及在哪里可以找到这些信息。我怀疑 1、3、5 表示不同级别的保护,例如整个驱动器或低于整个驱动器等。但是,我找不到任何关于每个值的含义或什至可以有多少值的文档回来。
  • @CodeWhore 请看这个答案stackoverflow.com/a/64328877/123201
猜你喜欢
  • 2020-02-07
  • 2020-02-13
  • 2021-08-25
  • 2020-03-28
  • 1970-01-01
  • 1970-01-01
  • 2011-03-01
  • 1970-01-01
  • 2017-10-19
相关资源
最近更新 更多