C# C中的Win32_EncryptableVolume设备循环#
我正在尝试使用BitLocker为每个可能连接到Win7及以上机器的设备构建一个循环。自从我们使用胎压监测系统以来,这在过去不是一个问题,但现在我们正在尝试使用USB密钥来降低成本。我的旧代码只显示了最后一个设备的加密状态,最终是USB驱动器。所以我想创建一个循环,列出每个驱动器及其加密状态 我的目标是创建一个阵列,其中包含每个驱动器的状态。我遇到的问题是识别searcher.Get()的结果中实际找到了多少项(我认为应该是下面的encrArr数组),所以我现在选择2作为硬盘和USB驱动器 下面的代码在编写时没有显示任何错误,但当我尝试运行它时它崩溃(“调用的目标抛出了异常”)C# C中的Win32_EncryptableVolume设备循环#,c#,loops,invoke,usb-drive,C#,Loops,Invoke,Usb Drive,我正在尝试使用BitLocker为每个可能连接到Win7及以上机器的设备构建一个循环。自从我们使用胎压监测系统以来,这在过去不是一个问题,但现在我们正在尝试使用USB密钥来降低成本。我的旧代码只显示了最后一个设备的加密状态,最终是USB驱动器。所以我想创建一个循环,列出每个驱动器及其加密状态 我的目标是创建一个阵列,其中包含每个驱动器的状态。我遇到的问题是识别searcher.Get()的结果中实际找到了多少项(我认为应该是下面的encrArr数组),所以我现在选择2作为硬盘和USB驱动器 下面
在调试中运行时,我没有收到任何错误,所以我编译了它并得到了错误行。它实际上是在表单端,因为我忘了注释掉对原始数组的调用。它在寻找三件东西,但只有两件,并且出错了。我仍然想知道如何将bitLockerArr数组的大小设置为查询返回的项数?
public string[] getBitLockerArr()
{
string[] encrArr = new string[2];
encrArr[0] = "Protection Off, Fully Decrypted, 0% encrypted";
encrArr[1] = "Protection Off, Fully Decrypted, 0% encrypted";
ManagementObjectSearcher searcher = new
ManagementObjectSearcher("root\\cimv2\\Security\\MicrosoftVolumeEncryption", "SELECT * FROM Win32_EncryptableVolume");
int i = 0;
foreach (ManagementObject wmi in searcher.Get())
{
try
{
string[] bitLockerArr = new string[3];
bitLockerArr[0] = "Unknown";
bitLockerArr[1] = "Unknown";
bitLockerArr[2] = "Unknown";
StringBuilder bitLocker = new StringBuilder();
ManagementObject classInstance =
new ManagementObject("root\\cimv2\\Security\\MicrosoftVolumeEncryption", "Win32_EncryptableVolume.DeviceID='" + wmi["DeviceID"] + "'", null);
ManagementBaseObject statProtection = classInstance.InvokeMethod("GetProtectionStatus", null, null);
ManagementBaseObject statConversion = classInstance.InvokeMethod("GetConversionStatus", null, null);
if (statProtection["ProtectionStatus"] != null) { bitLockerArr[0] = statProtection["ProtectionStatus"].ToString(); }
if (statConversion["ConversionStatus"] != null) { bitLockerArr[1] = statConversion["ConversionStatus"].ToString(); }
if (statConversion["EncryptionPercentage"] != null) { bitLockerArr[2] = statConversion["EncryptionPercentage"].ToString(); }
// BitLocker Protection Status
string blProtStat = bitLockerArr[0];
if (blProtStat == "0") { blProtStat = "Protection Off"; }
else if (blProtStat == "1") { blProtStat = "Protection On"; }
// BitLocker Conversion Statuses
string blConvStat = bitLockerArr[1];
if (blConvStat == "0") { blConvStat = ", Fully Decrypted"; }
else if (blConvStat == "1") { blConvStat = ", Fully Encrypted"; }
else if (blConvStat == "2") { blConvStat = ", Encryption In Progress"; }
else if (blConvStat == "3") { blConvStat = ", Decryption In Progress"; }
else if (blConvStat == "4") { blConvStat = ", Encryption Paused"; }
else if (blConvStat == "5") { blConvStat = ", Decryption Paused"; }
// BitLocker Encryption Status
string blEncStat = ", " + bitLockerArr[2] + "% encrypted";
encrArr[i] = wmi["DriveLetter"] + " " + blProtStat + blConvStat + blEncStat + ", " + wmi["DeviceID"];
i = i + 1;
}
catch { }
}
return encrArr;
}