CIM и MOF
CIM подобен объектно-ориентированным языкам программирования C++ и Java, в которых проектировщик создает представления в виде классов. Использование классов дает разработчику возможность задействовать всю мощь технологии моделирования наследования и композиции. Подклассы могут наследовать определенные атрибуты родительских классов и добавлять собственные свойства или переопределять свойства, унаследованные от родительских классов. Класс, который наследует свойства другого класса, является наследником родительского класса. Классы также могут иметь сложное наследование: разработчик может построить класс, являющийся производным от нескольких родительских классов.
DMTF предоставляет несколько классов как часть WBEM-стандарта. Эти классы - основа CIM; они обеспечивают интерфейс ко всем областям управления и являются частью модели ядра CIM. Примером такого класса может служить CIM_ManagedSystemElement. Этот класс содержит несколько основных свойств, которые идентифицируют физические компоненты, такие, как устройства, и логические компоненты, такие, как файлы. Свойства включают заголовок, описание, дату установки и статус. Таким образом, классы CIM_LogicalElement и CIM_PhysicalElement наследуют атрибуты класса CIM_ManagedSystemElement. Оба эти класса также являются частью модели ядра CIM. Стандарт WBEM называет их абстрактными, так как они существуют исключительно как родительские для других классов (т. е. не может существовать экземпляра абстрактного класса). Поэтому абстрактные классы можно представлять как шаблоны, определяющие свойства для использования в других классах.
Другая категория классов представляет объекты, которые являются специфическими для задач управления, но не зависят от конкретной реализации. Эти классы составляют общую модель и рассматриваются как расширение основной модели. Примером класса общей модели может служить класс CIM_FileSystem, наследующий свойства класса CIM_LogicalElement. Поскольку фактически каждая операционная система, будь то Windows 2000, Linux или другие версии UNIX, использует файловую систему как основную структуру хранения информации, класс CIM_FileSystem является естественной составляющей общей модели.
Последняя категория классов включает специфические для каждой технологии дополнения к обычному классу. Windows 2000 определяет большое число таких классов для представления объектов, специфических для среды Win32. Поскольку все операционные системы хранят данные в файлах, общая модель CIM включает класс CIM_LogicalFile. Класс CIM_DataFile является наследником класса CIM_LogicalFile, и Win32 добавляет классы Win32_ PageFile и Win32_ShortCutFile для соответствующих типов файлов операционной системы Win32.
Провайдер EventLog широко использует наследование. На Экране 1 показан вид WMI CIM Studio - браузера для просмотра классов, поставляемого с WMI SDK (Microsoft поставляет WMI SDK с MSDN). Он позволяет увидеть, где провайдер EventLog использует наследование в классе Win32_NTEventlogFile, который и образуется от CIM_DataFile. Файлы EventLog являются файлами данных, имеющими специфические атрибуты, такие, как имя файла журнала и количество содержащихся в нем записей. По дереву, которое показывает браузер, видно, что класс Win32_ NTEventlogFile имеет сложное наследование, в котором класс CIM_ DataFile - наследник CIM_LogicalElement, а CIM_LogicalElement - наследник CIM_ManagedSystemElement.
ЭКРАН 1. Просмотр наследования классов с помощью браузера классов CIM Studio.
Как я упоминал вначале, разработчики провайдеров WMI-классов пишут свои классы на языке MOF. Экран 2 показывает определение класса Win32_NTEventlogFile, который был выбран на Экране 1. Отметим корреляцию между первыми шестью свойствами в правой панели списка на Экране 1 и определениями этих же свойств MOF-файла на Экране 2. CIM Studio использует желтые стрелки, чтобы показать наследование подобных свойств от родительского класса. Поэтому мы не видим определений этих свойств в определении класса Win32_ NTEventlogFile. Один из терминов, который в связи с этим стоит рассмотреть, - динамический (DYNAMIC) провайдер. Он является описательным указателем (характеристикой) для класса Win32_ NTEventlogFile, показанного в MOF-файле на Экране 2.
Этот термин означает, что инфраструктура WMI запрашивает WMI-провайдера о значениях свойств, ассоциированных с классом, тогда, когда управляющее приложение запрашивает эти свойства. СТАТИЧЕСКИМ является тот класс, для которого провайдер сохраняет свойства в репозитарии WMI; инфраструктура WMI ссылается на репозитарий для получения значений, а не опрашивает для этого провайдера. Поскольку модифицирование репозитария - операция относительно дорогая, динамические провайдеры более эффективны для объектов, у которых изменение свойств происходит часто.
ЭКРАН 2. Определение класса Win32_NTEventlogFile.
После создания классов в MOF разработчики WMI могут вставить определения класса в WMI несколькими путями. Первый путь предполагает компиляцию MOF-файла в бинарный MOF(BMF)-файл - более компактное бинарное представление, чем MOF-файл, - и размещение BMF-файла в инфраструктуре WMI. Другой путь для провайдера - это компилировать MOF и использовать WMI API COM, чтобы предоставить определения классов WMI-инфраструктуре. Наконец, провайдер может использовать инструмент mofcomp, чтобы непосредственно дать WMI-инфраструктуре откомпилированное представление класса.