Передать параметр методу WMIC

Я пытаюсь использовать "GetEncryptionMethod" который принимает два параметра out, но я не уверен, как передать это в моем коде С#. Вот код:

   ManagementScope scope = new ManagementScope("\\\\.\\ROOT\\CIMV2\\Security\\MicrosoftVolumeEncryption");
   CallMethod(scope);

public static void CallMethod(ManagementScope scope)
    {
        try
        {
            ManagementClass cls = new ManagementClass(scope.Path.Path, "Win32_EncryptableVolume", null);                
            foreach (var t in cls.Methods)
            {
                Console.WriteLine(t.Name); //this prints all method including GetEncryptionMethod
            }

            ManagementBaseObject inParams = cls.GetMethodParameters("GetEncryptionMethod"); //this returns null

//How do we pass out parameter here?

            //inParams["EncryptionMethod"] = 1;
            //inParams["SelfEncryptionDriveEncryptionMethod"] = null;


            ManagementBaseObject outSiteParams = cls.InvokeMethod("GetEncryptionMethod", null, null);

        }
        catch (ManagementException e)
        {
            throw new Exception("Failed to execute method", e);
        }
    }

person Raj    schedule 29.05.2019    source источник
comment
Используйте ключевое слово out. См. модификатор параметра out (справочник по C#). )   -  person Rita Han    schedule 30.05.2019


Ответы (1)


Для создания большинства код и сделать несколько тестов.

Например, это работает для меня (цикл на томах, но вы можете напрямую установить DeviceID) =>

try
{
    ManagementObjectSearcher searcher = new ManagementObjectSearcher("root\\CIMV2", "SELECT * FROM Win32_Volume");
    foreach (ManagementObject queryObj in searcher.Get())
    {
        Console.WriteLine("DriveLetter: {0}", queryObj["DriveLetter"]);
        Console.WriteLine("DeviceID: {0}", queryObj["DeviceID"]);
        if (queryObj["Capacity"] != null)
        {
            string sQuery = "Win32_EncryptableVolume.DeviceID='" + queryObj["DeviceID"] + "'";
            ManagementObject classInstance = new ManagementObject("root\\CIMV2\\Security\\MicrosoftVolumeEncryption", sQuery, null);

            ManagementBaseObject outParams = classInstance.InvokeMethod("GetEncryptionMethod", null, null);
            Console.WriteLine("Out parameters =>");
            Console.WriteLine("EncryptionMethod: " + outParams["EncryptionMethod"]);
            Console.WriteLine("EncryptionMethodFlags: " + outParams["EncryptionMethodFlags"]);
            Console.WriteLine("ReturnValue: " + outParams["ReturnValue"]);
            Console.WriteLine("SelfEncryptionDriveEncryptionMethod: " + outParams["SelfEncryptionDriveEncryptionMethod"]);
        }                      
    }
}
catch (ManagementException me)
{
    System.Windows.Forms.MessageBox.Show("An error occurred while querying for WMI data: " + me.Message);
}
person Castorix    schedule 25.06.2019