Windows - Windows Management Instrumentation (WMI) általános bemutatása

WMI 1. rész

A Windows Management Instrumentation (WMI) szolgáltatáson keresztül egy komplett hálózat minden programozható, aktív összetevője elérhető, lekérdezhető és módosítható. Például a számítógép minden hardver és szoftver összetevőjének paraméterei, tulajdonságai, egy hálózati útválasztó táblája, de ha programozható, akkor még akár a légkondicionáló adatai is. Mindez Delphi-ből, C#-ból, szkriptekből és egyéb fejlesztőkörnyezetekből is lehetséges egy egységes platform független rendszeren keresztül. Ezzel a résszel útjára indítunk egy cikksorozatot, amelyben bemutatjuk a lehetőségeket elméletben és programozási példákon keresztül egyaránt. A Microsoft a WMI segítségével valósítja meg a Web alapú vállalatirányítási rendszert (Web-Based Enterprise Management - WBEM). Célja, hogy egy vállalati hálózati környezetben az információkezelést egységes technológiákkal oldja meg. A felhasználóknak lehetőségük van az alkalmazások, hálózatok vagy egyéb vállalati komponensek által szolgáltatott adatok lekérdezésére és módosítására. A fejlesztők számára rendelkezésre állnak programozási interfészek a Delphi, C#,C/C++, ODBC, Visual Basic, VBScript és HTML megvalósítások kidolgozására - gyakorlatilag az összes COM programozást támogató környezetből elérhető. Szorosan képes együttműködni a Windows összetevők széles skálájával köztük az Active Directory-val is. Felhasználható a gyakorlatilag az összes 32 bites (és már a 64 bites) Windows operációs rendszerben: Windows 95/98/Me/NT/2000/XP és a .NET szerverekben is. Közvetlen beépített támogatást a .NET és a 2000/XP verzióik biztosítanak.

Néhány alkalmazási terület:

Megvalósítható vele a Windows konfigurációs feladatainak elvégzése, felhasználói fiókok kezelése, jogosultságok beállítása, az objektumok biztonsági mentése. Meghajtók kezelése a helyi és a hálózat távoli gépén egyaránt: lekérdezhetők és módosíthatók az eszközök tulajdonságai, beállításai. Olyan rendszerszintű műveletek elvégzésére is alkalmas, mint a lapozófájl méretének megváltoztatása vagy a helyi vagy távoli gépek leállítása, újraindítása.
Windows 2000-ben a felügyeleti eszközök Kezelés (Manage) konzolja a benne lévő segédprogramokkal és a Rendszertulajdonságok (System Properties) szolgáltatás aktívan használja.

A CIM modell:

A WMI integrált támogatást biztosít a CIM modellhez (Common Information Model = Általános információs modell). A CIM írja le egy vállalati környezetben található objektumokat, tulajdonképpen egy hatalmas adatbázis. Ha pontosabban akarunk fogalmazni, akkor inkább a különböző vállalati részekről információt tároló, programozási nyelv független, kiterjeszthető, objektum orientált adatmodell megnevezést kell használnunk. A fejlesztő a WMI szolgáltatáson keresztül elérve a CIM-t kezelheti a merevlemez meghajtókat, alkalmazásokat, hálózati elemeket (pl. router) vagy hálózatba kapcsolt egyedi, programozható eszközöket (akár a légkondicionálót is).

A WMI osztályok (WMI Classes):

System Classes: A CIM előre definiált osztályainak egy gyűjteménye. Olyan elemeket tartalmaz, mint események regisztrálása, rendszer biztonsági beállítások, figyelmeztető üzenetek generálása. Az osztályok egyedi elnevezési rendszerrel rendelkeznek, két aláhúzott vonalat követ az osztály neve (pl: __NotifyStatus, __Parameters, __SystemSecurity).

Win32 Classes: A számítógép hardver elemeinek elérését biztosítja, még a processzor hűtőventillátor kezeléséhez (fordulatszám lekérdezés, szabályozás) is tartalmaz osztályokat. A teljes Windows operációs rendszert alkotó objektumok elérhetők (pl.: szolgáltatások, hálózati megosztások, felhasználói fiókok, ütemezett feladatok, Registry, termék aktiválás, COM, telepített alkalmazások, teljesítmény számlálók, stb.).

Standard Consumer Classes: Az egyéb kategóriába sorolható, bár cseppet sem mellékes: szkriptek által generált események kezelése, regisztrálása, naplózása, SMTP szolgáltatás és a parancssor által generált események kezelése.

Ezek csak a főbb osztályok, de a programozási nyelvek támogatásához, csoportházirendek kezeléséhez és esemény összefüggések vizsgálatához is találunk több száz függvényt, metódust és tulajdonságot. Ezenkívül, úgynevezett Provider-eken keresztül hozzáférhető az Active Directory, DFS, lemezkvóta, energiaellátás, SNMP és sok más része is a számítógépnek hardveres és szoftveres szemszögből egyaránt.

Hogy lehet ezt a rengeteg adatot elérni?
Mint említettük a WMI rendelkezik programozási interfészekkel, így gyakorlatilag bármilyen alkalmazás fejlesztői környezetből használható. A motort egy WQL (WMI Query Language) elnevezésű lekérdezőnyelv adja, ahol szabályos SQL parancsokkal dolgozhatunk.

Névterek (Namespaces):

Az osztályok logikailag csoportokba vannak rendezve a könnyebb kezelhetőség kedvéért, ezeket a csoportokat névtereknek nevezzük. Ábrázolását egy faszerkezetben kell elképzelni, ahol a gyökérből (root) indulunk ki és az ágak különböző mélységig egymásba ágyazódnak (pl.: root\cimv2 vagy root\directory\LDAP).

Biztonság:

A WMI hitelesítési eljárások használatával fér hozzá az objektumokhoz, ezért a futtatáshoz megfelelő jogokkal kell rendelkezni. Képes a felhasználó nevét és jelszavát használni. Ha az adott személy jogosult az erőforrás elérésére, sikeres lesz a hozzáférés.

Végül nézzünk egy egyszerű WMI-t használó VBScript-et, amellyel kiléphetünk az operációs rendszerből és újraindíthatjuk a számítógépet:
Set OpSysSet = GetObject("winmgmts:{(Shutdown)}//./root/cimv2").ExecQuery("select * from
    Win32_OperatingSystem where Primary=true")
     for each OpSys in OpSysSet
	OpSys.Reboot()
next
A "winmgmts" szolgáltatás "Win32_OperatingSystem" osztály elérésével meghívtuk a gép újraindításáért felelős metódusát (Reboot). Jól látszik a WQL lekérdezés használata is. A Windows 9x rendszerekben a Windows Management szolgáltatás egy WINMGMTS.EXE fájlon keresztül futott. Windows NT/2000/XP-ben ez bekerült az SVCHOST szolgáltatásba.

WMI cikksorozat