WMI + Bitlocker + C # Получить зашифрованные тома производит тайм-аут - PullRequest
1 голос
/ 26 июля 2010

Я хочу создать класс-оболочку для определенных функций WMI, которые влияют на функциональность Bitlocker. Первый шаг - получить все тома Bitlocker машины, поэтому я создал консольное приложение и сделал следующее:

private static ManagementClass management;
    private static ManagementObjectCollection Volumes = null;

    static void Main(string[] args)
    {

        ManagementPath path = new ManagementPath();
        path.Server = "";
        path.NamespacePath = "\\ROOT\\CIMV2\\Security\\MicrosoftVolumeEncryption";
        path.ClassName = "Win32_EncryptableVolume";


        ConnectionOptions options = new ConnectionOptions();
        options.Authentication = AuthenticationLevel.PacketPrivacy;
        options.Impersonation = ImpersonationLevel.Impersonate;

        ManagementScope scope = new ManagementScope(path, options);
        ObjectGetOptions getOptions = new ObjectGetOptions();

        management = new ManagementClass(scope, path, getOptions);
        management.Get();
        Volumes = management.GetInstances();

    }

Когда я запускаю это на компьютере без Bitlocker, коллекция томов инициализируется нормально, конечно, только с числом 0. Теперь я скопировал код в приложение WinForms, и когда я нажимаю кнопку для запуска этого кода, он проходит через ОК, но когда я пытаюсь расширить коллекцию во время отладки, приложение зависает, и я получаю «Тайм-аут оценки функции». Это тот же код просто в другом приложении. Что может быть причиной этого?

Ответы [ 2 ]

0 голосов
/ 29 марта 2017

У меня просто была похожая проблема, я опубликую свой код для вас, надеюсь, это поможет.

ManagementObjectSearcher Encryption = new ManagementObjectSearcher(@"root\cimv2\Security\MicrosoftVolumeEncryption", "SELECT * FROM Win32_EncryptableVolume");

        foreach (ManagementObject QueryObj in Encryption.Get())
        {
            string EncryptionStatus = QueryObj.GetPropertyValue("ProtectionStatus").ToString();

            if (EncryptionStatus == "0")
            {
                EncryptionDialog.Text = "Unencrypted";
            }
            else if (EncryptionStatus == "1")
            {
                EncryptionDialog.Text = "Encrypted - SysPrep will not complete";
            }
            else if (EncryptionStatus == "2")
            {
                EncryptionDialog.Text = "Cannot Determine Encryption";
            }
        }

Я использую это для отображения статуса инструмента sysprep, который я создаю, поэтомуEncryptionDialog.Text = ... "можно заменить любыми другими вызовами, которые могут вам понадобиться.Вы также должны помнить, «что, по крайней мере, вызвало у меня проблемы», если вы используете Visual Studio, вам нужно будет добавить файл в проект с пометкой «Файл манифеста приложения» в диалоге «Добавить новый файл».Причина этого заключается в том, что приложение необходимо будет открыть в режиме администратора (только на ваше усмотрение, если вы еще не сделали этого)

0 голосов
/ 26 июля 2010

Hm.Я получил исключение нулевой ссылки, если не запускал его как администратор, но когда я запускал его как администратор (Win 7 x64, кстати), я получил четыре тома назад.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...