WMI

Windows Management Instrumentation (WMI) — набор расширений для Windows Driver Model, обеспечивающий интерфейс операционной системы для обмена информацией и уведомлениями между инструментированными компонентами. WMI представляет собой реализацию Microsoft стандартов Web-Based Enterprise Management (WBEM) и Common Information Model (CIM), разработанных организацией Distributed Management Task Force (DMTF).

Что важно знать

Назначение WMI

Назначение WMI — определить собственный набор независимых от среды спецификаций, обеспечивающих обмен данными управления между приложениями. WMI реализует стандарты корпоративного управления и смежные технологии для Windows, которые работают совместно с существующими стандартами, такими как Desktop Management Interface (DMI) и Simple Network Management Protocol (SNMP). WMI дополняет эти стандарты, предоставляя единообразную модель доступа к управленческим данным из любых источников.

Процесс разработки

Поскольку WMI абстрагирует управляемые объекты с помощью Common Information Model (CIM) и набора провайдеров, разработка провайдера включает несколько этапов. Основные шаги:

  1. Создание модели управляемого объекта
    1. Определение модели
    2. Реализация модели
  2. Создание провайдера WMI
    1. Определение типа реализуемого провайдера
    2. Определение модели размещения провайдера
    3. Создание шаблона провайдера с помощью мастера ATL
    4. Реализация логики в коде провайдера
    5. Регистрация провайдера в WMI и системе
  3. Тестирование провайдера
  4. Создание тестового сценария (кода) для потребителя.

Провайдеры

С момента появления первой реализации WMI во времена Windows NT 4.0 SP4 (как загружаемый отдельно пакет) Microsoft постоянно увеличивала количество провайдеров WMI:

Многие потребители расценивают рост числа провайдеров как знак того, что Microsoft видит в WMI универсальный уровень управления Windows.

Кроме скриптовых средств, большинство систем управления, таких как Microsoft Operations Manager (MOM), System Center Configuration Manager (SCCM), Active Directory Services (ADS), HP OpenView (HPOV), решения BMC Software, CA, Inc. поддерживают WMI, то есть могут использовать и предоставлять информацию WMI. Это позволяет администраторам без навыков программирования под WMI использовать его возможности.

Возможности

WMI предоставляет ряд функций «из коробки». К основным преимуществам относятся:

  • Интерфейсы автоматизации: WMI имеет встроенный набор интерфейсов автоматизации. Благодаря им разработчикам и тестировщикам Microsoft не требуется разрабатывать, валидировать и тестировать сценарные модели дополнительно — они уже предоставляются WMI.
  • Интерфейсы управления .NET: Пространство имён System.Management[3] делает классы WMI доступными во всех приложениях и скриптах на C# и PowerShell. Таким образом, поддержка нового пространства имён .NET не требует создания дополнительных сборок.
  • COM-интерфейсы: Небезопасный код в Microsoft Windows (например, приложения на C или C++) может взаимодействовать с провайдерами и поддерживаемыми классами WMI через стандартный набор COM-интерфейсов. Разработчики провайдеров WMI могут применять те же интерфейсы в своих проектах.
  • Удалённый доступ через DCOM и SOAP: Помимо локального доступа через COM, WMI поддерживает удалённый доступ с помощью Distributed COM (DCOM) и SOAP. Последний появился в Windows Server 2003 R2 и новее через инициативу WS-Management, которую поддержали Microsoft, Intel, Sun Microsystems и Dell. Эта инициативу позволяет выполнять любые скрипты удалённо или получать данные WMI через интерфейсы, работающие с SOAP-запросами и ответами. WS-Management может работать с любой информацией провайдера, хотя вложенные объекты WMI поддерживаются только начиная с Windows Vista. Со временем WS-Management стал неотъемлемой частью PowerShell. Для DCOM требуется установка прокси-библиотеки (.dll) на каждом клиенте.
  • Поддержка запросов: WMI поддерживает запросы на WQL[4]. Это означает, что WMI может фильтровать результаты провайдера, даже если тот не поддерживает фильтрацию или запросы сам.
  • Обработка событий: WMI может уведомлять подписчиков о происходящих событиях, используя WQL для подачи запросов и описания типов возвращаемых событий. Все разработчики провайдеров WMI могут использовать эту функциональность, вопрос только в том, как потребитель будет использовать предоставляемую им информацию.

Для ускорения написания провайдеров команда WMI внедрила мастер WMI ATL Wizard, который автоматически генерирует шаблон кода на основе заданной разработчиком модели классов. Разработчик может интегрировать заранее определённые интерфейсы COM или DCOM с собственными API для извлечения управленческих данных.

WMI построен на отраслевом стандарте Common Information Model (CIM), определённом консорциумом Distributed Management Task Force (DMTF). Схема классов CIM согласована производителями аппаратуры и ПО в интересах индустрии. Любой разработчик может писать код под эту модель. Например, Intel разрабатывает WMI-провайдеры для своих сетевых адаптеров, HP использует существующие и собственные провайдеры для OpenView, IBM (Tivoli) потребляет данные через WMI. Начиная с Windows XP SP2, Microsoft использует WMI для определения статуса антивирусов и фаерволов.

WMI позволяет использовать языки сценариев (например, VBScript или PowerShell) для управления Microsoft Windows как на локальных компьютерах, так и на серверах, в том числе удалённо. WMI предустановлен в Windows 2000 и более новых версиях Windows. Для Windows NT 4.0[5], Windows 95 и Windows 98 её можно скачать отдельно[6].

В комплект ОС также входила Windows Management Instrumentation Command-line (WMIC) — консольная утилита для работы с WMI[7]. Однако начиная с Windows 10, версия 21H1 и Windows Server 2022, WMIC объявлен устаревшим в пользу PowerShell[8].

Служба

В ОС семейства Windows NT WMI работает как служба Windows под именем WinMgmt. В системах Windows 9x — в виде исполняемого файла WinMgmt.exe. В обеих линейках WinMgmt.exe доступен как консольная утилита для обслуживания хранилища WMI[9].

Инструменты WMI

Microsoft предоставляет следующие инструменты WMI для разработчиков и ИТ-специалистов:

  • Компилятор MOF (MOFComp.exe): Компилятор Managed Object Format (MOF) парсит файл с MOF-описаниями и добавляет определённые в нём классы и объекты в хранилище CIM. Формат MOF — это специальный синтаксис для описания классов CIM в ASCII-файле, его роль для CIM сопоставима с ролью MIB у SNMP. MOFComp.exe входит во все установки WMI, все определения в CIM изначально задаются в MOF-файлах. Файлы MOF расположены по адресу %SystemRoot%\System32\WBEM. При установке WMI они загружаются в CIM-хранилище.
  • WMI Administrative Tools: Набор включает WMI CIM Studio, WMI Object Browser, WMI Event Registration и WMI Event Viewer. Kлючевой инструмент для разработчика провайдеров — WMI CIM Studio: он помогает создавать классы в CIM-репозитории, использует веб-интерфейс и требует установки набора компонентов ActiveX при первом запуске. С его помощью можно:
    • Подключаться к выбранной системе и просматривать CIM-репозиторий в любом пространстве имён.
    • Искать классы по имени, описанию или свойствам.
    • Изучать свойства, методы и связи выбранного класса.
    • Работать с экземплярами классов.
    • Выполнять WQL-запросы.
    • Генерировать MOF-файлы на основе выбора.
    • Компилировать MOF-файлы для загрузки в проект CIM.
  • WBEMTest.exe — тестовая утилита WMI с графическим интерфейсом, поставляемая с WMI. Позволяет администратору или разработчику выполнять большинство API-операций (перечисление, создание, удаление классов и экземпляров, выбор пространства имён, запросы и методы) с возможностью асинхронного, синхронного и полуасинхронного выполнения. Хотя присутствует во всех NT-подобных ОС, официальной поддержки Microsoft не имеет.
  • Командная утилита WMI (WMIC): Средство для автоматизации и сценариев, позволяющее получать информацию и управлять системой по WMI с помощью ключевых слов (алиасов). WMIC поставляется начиная с Windows XP; с Windows 10, версия 21H1 и Windows Server 2022 объявлен устаревшим в пользу PowerShell[8]. В Windows 11, версия 24H2 WMIC по умолчанию не устанавливается. В Linux имеется порт WMIC, wmi-client, реализованный на Python и использующий Samba4[10].
  • WBEMDump.exe: Командная утилита из состава Platform SDK, поставляется вместе с проектом на Microsoft Visual C++. Показывает классы и экземпляры из CIM-хранилища, позволяет получать всю ту же информацию, что и WMIC, а также выполнять методы классов или их экземпляров. WBEMDump требует более глубоких знаний о WMI и не абстрагирует работу, как WMIC. Может использоваться для изучения CIM и возможностей WMI.
  • WMIDiag.vbs (устаревший): Инструмент диагностики WMI — VBScript для тестирования и проверки WMI (Windows 2000 и выше), был доступен для скачивания до августа 2020 года[11]. Программа генерирует до четырёх текстовых файлов: журнал (LOG), отчёт (REPORT), статистику (в формате CSV) и при необходимости — реестр провайдеров (PROVIDERS, тоже в CSV). Отчёт содержит выявленные проблемы и рекомендации по их исправлению.

Пример для беспроводных сетей

В .NET Framework класс ManagementClass представляет CIM-класс управления. Класс WMI может, например, называться Win32_LogicalDisk (диск) или Win32_Process (процесс, к примеру, Notepad.exe).

В следующем примере показано использование класса MSNdis_80211_ServiceSetIdentifier для определения SSID Wi-Fi-сети, к которой подключён компьютер, на языке C#:

ManagementClass mc = new ManagementClass("root\\WMI", "MSNdis_80211_ServiceSetIdentifier", null);
ManagementObjectCollection moc = mc.GetInstances();

foreach (ManagementObject mo in moc)
{
    string wlanCard = (string)mo["InstanceName"];
    bool active;
    if (!bool.TryParse((string)mo["Active"], out active))
    {
       active = false;
    }
    byte[] ssid = (byte[])mo["Ndis80211SsId"];
}

Класс MSNdis_80211_ServiceSetIdentifier поддерживается только в Windows XP и Windows Server 2003.

Расширения драйверов WMI

Расширения WMI для WDM позволяют на уровне ядра публиковать информацию, настраивать параметры устройств и уведомлять о событиях из драйверов, а также управлять безопасностью через WMI-провайдер «WDM provider». Хотя расширения формально относятся к архитектуре WDM, они могут применяться и с другими типами драйверов (SCSI, NDIS и др.).

Служба WMI Driver Extensions отслеживает все драйверы и поставщиков событий, публикующих данные WMI или трейсы событий. Инструментируемые аппаратные данные предоставляются через драйверы, соответствующие расширениям WMI для WDM. Эти расширения предлагают производителям оборудования и вендорам возможность легко добавлять в решение новые данные. Однако поддержка WMI Driver Extensions прекращена, начиная с Windows Vista и более новых версий[12].

Примечания

Литература

Ссылки