Массивы MOF

Массив — это индексированные списки значений данных того же типа данных, на которые можно ссылаться. Помимо строковых и числовых массивов MOF поддерживает массивы внедренных объектов и ссылок.

Массив MOF определяется следующими правилами:

  • Квадратные скобки, используемые после идентификатора свойства, указывают массив в определении класса.

    Class ArrayDataSample1
    {
        string strArray1[];
    };
    
  • Все массивы должны быть одномерными.

  • Массивы могут быть неограниченными или иметь явный размер.

    Class MyClass
    {
        sint32 MyMethod1 ([in, id(0)] Win32_LogicalDisk DiskArray1[]);
        sint32 MyMethod2 ([in, id(0)] Win32_LogicalDisk DiskArray2[32]);
    };
    

    WMI реализует ограниченные и неограниченные массивы в виде структур SAFEARRAY , что позволяет инструментарию WMI изменять размеры массивов во время выполнения. При объявлении массива с явным размером WMI сохраняет размер в качестве квалификатора и обрабатывает его как рекомендуемый максимальный размер. Однако при необходимости WMI может увеличить размер. Изменение явного размера не влияет на фактические данные.

  • Массивы инициализируются путем указания значений соответствующего типа в списке, разделенном запятыми.

    Class ArrayDataSample2
    {
        [key] string s;
        string strArray2[] = {"hello", "there"};
        sint32 dwArray[] = {1,2,3};
    };
    
  • Массив ссылок объявляется как массив строк пути к объекту.

    При объявлении строки пути к объекту не следует размещать пробелы между элементами пути к объекту. В следующем примере описывается объявление ссылки на путь к объекту.

    Class ClassWithRefArray
        { 
        [key] string s; 
        object ref refArray[]; 
        };
    
    instance of ClassWithRefArray
        {
        s = 23;
        refArray = {"Disk.Name=\"C:\"", "Disk.Name=\"E:\""};
        };
    
  • Массив можно использовать в качестве параметра для метода, но не в качестве возвращаемого значения для входного или выходного параметра.

  • Все элементы в массиве создаются как значения одного типа.

    Если элементы массива относятся к типу объекта , в массиве можно поместить любой объект. С другой стороны, если объявить определенный тип объекта, WMI разрешает только объекты этого класса или подкласса в массиве. В следующих примерах показаны объявления массива, включающие использование типа объекта .

    Class EmbedClass
    {
        [key] sint32 PropOfClass;
    };
    
    Class ArrayDataClass
    {
        [key] string s;
        string strArray1[];
        string strArray2[] = {"hello", "there"};
        sint32 dwArray[] = {1,2,3};
        EmbedClass objArray[];
    };
    
    instance of ArrayDataClass
    { 
        s = "keyStuff";
        strArray1 = { "1.2.3.4", "1.2.3.5", "1.2.3.7"};
        strArray2 = 
            {
                "SELECT * FROM RegistryKeyChangeEvent",
                "SELECT * FROM RegistryValueChangeEvent",
                "SELECT * FROM RegistryTreeChangeEvent"
            };
        dwArray  = { 1,2,3,5,6 };
        objArray = {
                       instance of EmbedClass{PropOfClass=3;},
                       instance of EmbedClass{PropOfClass=4;}
                   };
    };