Передайте параметр в метод WMIC - PullRequest
0 голосов
/ 29 мая 2019

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

   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);
        }
    }

1 Ответ

0 голосов
/ 25 июня 2019

Вы можете использовать WMI Code Creator для генерации большей части кода и выполнения некоторых тестов.

Например, это работает для меня (цикл по томам, но вы можете установить непосредственно 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);
}
...