HyperLink
Bejelentkezés
E-mail: 
Jelszó: 





Skip Navigation Links
 

Windows Management Instrumentation (WMI) programozása Delphi-ből


Példaprogram letöltése

4246 bájt

A Windows Management Instrumentation 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 Dephi, C#, C++, Visual Basic, VBScript és HTML megvalósítások kidolgozására. Emellett bármilyen szoftverfejlesztői környezetben képesek vagyunk WMI-t programozni, mely támogatja a COM fejlesztést, így például Delphi-t is használhatunk e célra. A WMI 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ó 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. Gyakorlati oldalról nézve a WMI-n keresztül lekérdezhetjük az adott számítógép minden hardver összetevőjének paramétereit kezdve a hálózati kártya MAC address-étől a memória méreten át a háttértárak információjáig. Persze a WMI nem csak a hardverrel kapcsolatos tennivalókat látja el, hanem szinte mindent: operációs rendszer, telepített alkalmazások, teljesítményszámlálók, stb.

A mellékelt példa megnyitása előtt válasszuk a Project - Import type library menüpontot, majd keressük elő a Microsoft WMI Scripting tételt. Importálás után létrejön egy WbemScripting_TLB unit, mely komponenseket is tartalmaz, amelyeket célszerű rögtön telepítenünk.
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.
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 programon keresztül futott. Windows NT/2000/XP-ben ez bekerült az SVCHOST szolgáltatásba.
WMI elérése Delphi-ből
Térjünk most át arra, hogy miként használhatjuk mindezt egy Delphi alkalmazásból.
Először is szükségünk lesz egy Type Library-ra. Válasszuk tehát a Project - Import type library menüpontot, majd keressük elő a Microsoft WMI Scripting tételt. Importálás után létrejön egy WbemScripting_TLB unit, mely komponenseket is tartalmaz, amelyeket célszerű telepítenünk.
Ezek után tegyünk fel egy TSWbemLocator komponenst a Form-ra. A ConnectServer függvényt meghívva létrehozhatjuk a WMI eléréséhez szükséges kapcsolatot.
  ws:=SWbemLocator1.ConnectServer('', 'root\cimv2', '', '', '', '', 0, nil);
  ws.Security_.Set_ImpersonationLevel(wbemImpersonationLevelImpersonate);
Példaként listázzuk ki a C: meghajtó tulajdonságait. Ehhez a Win32_LogicalDisk előre összeállított lekérdezést kell futtatnunk, paraméterként megadva a C: meghajtót.
  wo:=ws.Get('Win32_LogicalDisk="C:"', 0, nil);
  for i:=0 to 21 do begin
    try
A kapott eredmény tulajdonságait a Properites_ property-n keresztül érhetjük el, annak Item függvényét meghívva. Ebben az első paraméter egy sztring lesz. Ez a sztring a lekérdezendő tulajdonság neve. Ezt a lekérdezést célszerű try-except blokkba tenni, mivel nem minden tulajdonságnak lesz értéke, de ha megpróbáljuk azt is kiolvasni, akkor hibaüzenettel leállna programunk.
      wp:=wo.Properties_.Item(names[i], 0);
      ListBox1.Items.Add(wp.Name+': '+wp.Get_Value);
    except
    end;
  end;

Könyv
Ez a cikk megtalálható ebben a könyvben: Delphi Software Offline 2002 évkönyv 336. oldal

Felhasználási feltételek
A Software Online szoftverfejlesztői magazin mindegyik cikke, minden megjelent képe, és egyéb publikált anyaga szerzői jog védelme alatt áll! Bármilyen formában történő másodlagos terjesztésük, közzétételük vagy felhasználásuk kizárólag a kiadó előzetes írásbeli engedélyével történhet!

Copyright © 1999-2012 Animare Software Kft. Minden jog fenntartva!
| Készült: Animare Stúdió | Adatvédelem | Kapcsolat |