Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# C中的Win32_EncryptableVolume设备循环#_C#_Loops_Invoke_Usb Drive - Fatal编程技术网

C# C中的Win32_EncryptableVolume设备循环#

C# C中的Win32_EncryptableVolume设备循环#,c#,loops,invoke,usb-drive,C#,Loops,Invoke,Usb Drive,我正在尝试使用BitLocker为每个可能连接到Win7及以上机器的设备构建一个循环。自从我们使用胎压监测系统以来,这在过去不是一个问题,但现在我们正在尝试使用USB密钥来降低成本。我的旧代码只显示了最后一个设备的加密状态,最终是USB驱动器。所以我想创建一个循环,列出每个驱动器及其加密状态 我的目标是创建一个阵列,其中包含每个驱动器的状态。我遇到的问题是识别searcher.Get()的结果中实际找到了多少项(我认为应该是下面的encrArr数组),所以我现在选择2作为硬盘和USB驱动器 下面

我正在尝试使用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;
}