Массивы 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;} }; };