Windows Management Instrumentation (WMI) в дослівному перекладі - це інструментарій управління Windows. Якщо говорити більш розгорнуто, то WMI - це одна з базових технологій для централізованого управління і стеження за роботою різних частин комп'ютерної інфраструктури під управлінням платформи Windows.


1. Огляд

Технологія WMI - це розширена і адаптована під Windows реалізація стандарту WBEM (на англ.), прийнятого багатьма компаніями, в основі якого лежить ідея створення універсального інтерфейсу моніторингу та управління різними системами і компонентами розподіленої інформаційної середовища підприємства з використанням об'єктно-орієнтованих ідеологій і протоколів HTML і XML.

В основі структури даних в WBEM лежить Common Information Model (CIM), що реалізує об'єктно-орієнтований підхід до подання компонентів системи. CIM є розширюваної моделлю, що дозволяє програмам, системам і драйверам додавати в неї свої класи, об'єкти, методи і властивості.

WMI, заснований на CIM, також є відкритою уніфікованою системою інтерфейсів доступу до будь-яких параметрах операційної системи, пристроїв і додатків, які функціонують в ній.

Важливою особливістю WMI є те, що зберігаються в ньому об'єкти відповідають динамічним ресурсах, тобто параметри цих ресурсів постійно змінюються, тому параметри таких об'єктів не зберігаються постійно, а створюються за запитом споживача даних. Сховище властивостей об'єктів WMI називається репозиторієм і розташоване в системній папці операційної системи Windows:

 % SystemRoot% \ System32 \ WBEM \ Repository \ FS 

2. Класи, події та безпеку WMI

Так як WMI побудований за об'єктно-орієнтованого принципу, то всі дані операційної системи представлені у вигляді об'єктів та їх властивостей і методів.

Всі класи групуються в простори імен, які ієрархічно впорядковані і логічно пов'язані один з одним за певною технологією або галузі управління. У WMI є одне кореневе простір імен Root, яке в свою чергу має 4 підпростори: CIMv2, Default, Security і WMI.

Класи мають властивості і методи і знаходяться в ієрархічній залежності один від одного, тобто класи-нащадки можуть успадковувати або перевизначати властивості класів-батьків, а також додавати свої властивості.

Властивості класів використовуються для однозначної ідентифікації примірника класу і для опису стану використовуваного ресурсу. Зазвичай всі властивості класів доступні тільки для читання, хоча деякі з них можна модифікувати певним методом. Методи класів дозволяють виконати дії над керованим ресурсом.

Кожному екземпляру класу можна звернутися по повному шляху, який має наступну структуру:

 [\ \ ComputerName \ NameSpace] [: ClassName] [. KeyProperty1 = Value1] [, KeyProperty2 = Value2] ...] де ComputerName - ім'я комп'ютера NameSpace - назва простору імен ClassName - ім'я класу KeyProperty1 = Value1, KeyProperty2 = Value2 - властивості об'єкта і значення, за яким він ідентифікується. 

Приклад звернення до процесу з ім'ям "Calc.exe", який запущено на локальній машині:

 \ \. \ CIMv2: Win32_Process.Name =  "Calc.exe" 

Екземпляри класів можуть генерувати події, до яких можна підписуватися. При настанні події WMI автоматично створює екземпляр того класу, якому відповідає ця подія. Такий механізм зручно використовувати для виконання певної команди при настанні певної події, тобто стежити за станом об'єктів операційної системи.

Загальна безпека в WMI реалізується на рівні операційної системи, а додаткова політика безпеки заснована на рівнях просторів імен та протоколу DCOM. Тобто якщо користувач не має права робити якусь дію через операційну систему, він не зможе це зробити і через WMI. Якщо ж користувачеві дано якесь право в операційній системі, то це ще не означає, що це право буде і в WMI, так як в WMI діють додаткові параметри безпеки на рівні просторів імен.

Кожен об'єкт операційної системи має свій опис безпеки (SD) зі своїм списком доступу (ACL), в якому перераховані ідентифікатори користувачів (SID) та їх привілеї. Кожне простір імен може мати власне SD зі своїм ACL, де користувачам можуть бути призначені дозволу на читання даних, виконання методів, запис класів і даних та інші. Дані про додаткові дозволах зберігаються в репозиторії WMI. Окремі класи з просторів імен не мають власних описів безпеки, вони успадковують їх від свого простору імен.

За замовчуванням адміністратор комп'ютера має повні права на використання WMI, а інші користувачі можуть лише викликати методи, зчитувати дані і записувати в репозиторій екземпляри класів провайдерів WMI.

Для доступу до інфраструктури WMI використовується протокол DCOM, через який користувач підключається до WMI. Щоб визначити, які права будуть у підключився користувача, використовується механізми уособлення і аутентифікації протоколу DCOM.

Рівні уособлення можуть приймати наступні значення:

Anonymous Анонімний WMI-об'єкт не може отримати інформацію про користувача - доступ по такому типу не надається
Identify Ідентифікація WMI-об'єкт запитує маркер доступу користувача - доступ надається тільки локально
Impersonate Уособлення WMI-об'єкт має такі ж права, які має користувач - рекомендований рівень для виконання команд на віддаленому комп'ютері
Delegate Делегування WMI-об'єкт може звернутися від імені користувача до іншого WMI-об'єкту - Нерекомендовані рівень, так як команди можна виконувати віддалено через ланцюжок з декількох комп'ютерів

Рівні аутентифікації (справжності) можуть приймати наступні значення:

None Відсутній Перевірка справжності відсутній
Default За замовчуванням Стандартні налаштування безпеки, які задаються комп'ютером-метою команди
Connect Підключення Перевірка тільки під час підключення до комп'ютера-цілі команди, перевірка в ході роботи відсутня
Call Виклик Перевірка справжності при кожному запиті до комп'ютера-цілі команди, заголовки пакетів підписуються, але вміст не шифрується
Pkt Пакет Перевірка справжності всіх пакетів до комп'ютера-цілі команди, заголовки пакетів підписуються, але вміст не шифрується
PktIntegrity Цілісність пакету Перевірка автентичності та цілісності всіх пакетів до комп'ютера-цілі команди, заголовки пакетів підписуються, але вміст не шифрується
PktPrivacy Секретність пакета Перевірка автентичності та цілісності всіх пакетів до комп'ютера-цілі команди, заголовки і вміст пакетів підписуються і шифруються

3. Засоби роботи з WMI

wmimgmt.msc - оснастка консолі керування MMC для налаштування WMI на локальному комп'ютері.

winmgmt.exe - консольна утиліта управління WMI локального комп'ютера.

wbemtest.exe - графічна утиліта для взаємодії зі структурою WMI на локальному або віддаленому комп'ютері.

wmic.exe - консольна утиліта для взаємодії зі структурою WMI на локальному комп'ютері.

mofcomp.exe - компілятор MOF-файлів для розширення структури WMI, управління бібліотекою класів WMI і відновлення репозиторію.


4. Мова запитів WMI

Для звернення до об'єктів WMI використовується специфічна мова запитів WMI Query Language (WQL), який є одним з різновидів SQL. Основна його відмінність від ANSI SQL - це неможливість зміни даних, тобто за допомогою WQL можлива лише вибірка даних за допомогою команди SELECT. Крім обмежень на роботу з об'єктами, WQL не підтримує такі оператори як DISTINCT, JOIN, ORDER, GROUP, математичні функції. Конструкції IS і NOT IS застосовуються тільки в поєднанні з константою NULL.

Запити WQL зазвичай застосовуються в скриптах, але їх також можна протестувати в програмі Wbemtest і в консольної утиліті Wmic (утиліта wmic не вимагає написання ключового слова SELECT і полів вибірки)


5. Використана література


Перегляд цього шаблону API і фреймворки Microsoft
Графіка Desktop Window Manager Direct2D Direct3D (extensions) GDI / GDI + WPF Windows Color System Windows Image Acquisition Windows Imaging Component
Аудіо DirectMusic DirectSound DirectX plugin XACT Speech API XAudio2
Мультимедіа DirectX (Media Objects Video Acceleration) DirectInput DirectShow Image Mastering API Managed DirectX Media Foundation XNA Windows Media Video for Windows
Web MSHTML RSS Platform JScript VBScript BHO XDR SideBar Gadgets
Доступ до даних Data Access Components Extensible Storage Engine ADO.NET ADO.NET Entity Framework Sync Framework Jet Engine MSXML OLE DB OPC
Мережа Winsock ( LSP) Winsock Kernel Filtering Platform Network Driver Interface Specification Windows Rally BITS P2P API MSMQ MS MPI DirectPlay
Комунікації Messaging API Telephony API WCF
Win32 console Windows Script Host WMI (extensions) PowerShell Task Scheduler Offline Files Shadow Copy Windows Installer Error Reporting Event Log Common Log File System
Компонентна модель COM COM + ActiveX Distributed Component Object Model . NET Framework
Бібліотеки Base Class Library (BCL) Microsoft Foundation Classes (MFC) Active Template Library (ATL) Windows Template Library (WTL)
Драйвери пристроїв Windows Driver Model Windows Driver Foundation (KMDF UMDF) WDDM NDIS UAA Broadcast Driver Architecture VxD
Безпека Crypto API ( CAPICOM) Windows CardSpace Data Protection API Security Support Provider Interface (SSPI)
. NET ASP.NET ADO.NET Base Class Library (BCL) Remoting Silverlight TPL WCF WCS WPF WF
Програмне забезпечення EFx Factory Enterprise Library Composite UI CCF CSF
IPC MSRPC Dynamic Data Exchange (DDE) Remoting WCF
Доступність Active Accessibility UI Automation
Текст і многоязная
підтримка
DirectWrite Text Services Framework Text Object Model Input method editor Language Interface Pack Multilingual User Interface Uniscribe