Vous êtes sur la page 1sur 35

Windows Management Instrumentation

(WMI), premire partie.


Par Laurent Dardenne

Date de publication : 26 juin 2004

Cet article a pour objectif d'aborder les principes de base de WMI et sa mise en uvre
sous Delphi.

Windows Management Instrumentation (WMI), premire partie. par Laurent Dardenne

I - Avant propos........................................................................................................................................................... 4
II - Introduction.............................................................................................................................................................4
III - Dfinitions diverses............................................................................................................................................... 5
III-A - Espace de nom............................................................................................................................................5
III-B - Chemin d'objet d'un espace de nom WMI...................................................................................................7
III-C - Chemin d'objet de classe............................................................................................................................ 7
III-D - Chemin d'objet d'instance............................................................................................................................7
III-D-1 - Complet............................................................................................................................................... 7
III-D-2 - Relatif...................................................................................................................................................8
III-D-3 - Relatif avec un simple nom................................................................................................................ 8
III-D-4 - Relatif avec de multiple valeur............................................................................................................8
III-D-5 - Relatif pour une classe singleton........................................................................................................8
III-E - Instance........................................................................................................................................................ 8
III-F - Provider........................................................................................................................................................ 8
III-G - Modes d'appel des mthodes..................................................................................................................... 9
III-G-1 - Mode synchrone..................................................................................................................................9
III-G-2 - Mode asynchrone................................................................................................................................9
III-G-3 - Mode semi-synchrone....................................................................................................................... 10
III-H - vnement................................................................................................................................................. 10
III-H-1 - Rception d'un vnement de WMI..................................................................................................11
III-H-2 - Rception d'vnements................................................................................................................... 11
III-H-2-a - Client d'vnement provisoire.................................................................................................. 12
III-H-2-b - Client d'vnement permanent.................................................................................................12
III-H-2-c - Mise disposition d'vnements et utilisation de clients standards......................................... 12
III-I - Authentification............................................................................................................................................ 12
III-J - Impersonation............................................................................................................................................. 13
III-J-1 - Utilisation de la base de registre pour dfinir le niveau d'usurpation d'identit..................................13
III-K - Windows Management Instrumentation Query Language.........................................................................13
III-L - Fichier MOF................................................................................................................................................14
IV - Meta-schmas.....................................................................................................................................................14
IV-A - Types de Classe CIM................................................................................................................................ 15
IV-A-1 - Classes abstraite (abstract class)..................................................................................................... 15
IV-A-2 - Classe statique..................................................................................................................................15
IV-A-3 - Classe dynamique.............................................................................................................................16
IV-A-4 - Classe d'association..........................................................................................................................16
IV-B - Proprits...................................................................................................................................................16
IV-C - Mthodes................................................................................................................................................... 16
IV-D - Trigger........................................................................................................................................................17
IV-E - Qualificateur de proprit WmiEventTrigger( data-item-name )............................................................ 17
IV-F - Indication.................................................................................................................................................... 17
IV-G - Rfrence.................................................................................................................................................. 17
IV-H - Schma......................................................................................................................................................17
IV-I - Qualificateurs...............................................................................................................................................18
IV-J - Quel genre d'information les qualificateurs fournissent-ils ?......................................................................18
IV-J-1 - Qualificateurs de classe.................................................................................................................... 18
IV-J-2 - Qualificateurs de proprit................................................................................................................ 18
IV-J-3 - Qualificateurs de mthode.................................................................................................................18
IV-K - Extension du schma................................................................................................................................ 19
IV-L - WMI Tester................................................................................................................................................. 19
IV-L-1 - Requte WQL....................................................................................................................................19
V - Paramtrage WMI et outils divers.......................................................................................................................20
V-A - Configurer les paramtres de WMI............................................................................................................ 20
V-A-1 - Accorder des autorisations des utilisateurs ou des groupes, et dfinir des niveaux
d'autorisation....................................................................................................................................................20
V-A-2 - Configurer l'enregistrement des erreurs............................................................................................ 20
V-A-3 - Effectuer une sauvegarde de l'espace de stockage.......................................................................... 20
V-A-4 - Modifier l'espace de noms de script.................................................................................................. 20
V-A-5 - Se connecter en tant qu'un autre utilisateur......................................................................................20
-2-

Copyright 2004 Laurent Dardenne. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents,
images, etc. sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu' trois ans de prison et jusqu' 300 000 de dommages et intrts.
http://laurent-dardenne.developpez.com/articles/wmi-p1/

Windows Management Instrumentation (WMI), premire partie. par Laurent Dardenne

V-B - Outils........................................................................................................................................................... 20
V-C - WMI et ODBC............................................................................................................................................ 21
V-D - Contrles ActiveX additionnels...................................................................................................................21
V-E - WbemDump................................................................................................................................................ 21
V-F - WMIC.......................................................................................................................................................... 22
VI - Delphi.................................................................................................................................................................. 23
VI-A - Configurer la palette de composants Delphi 5.......................................................................................... 23
VI-B - Crer une application WMI........................................................................................................................23
VII - Interface IEnumVARIANT.................................................................................................................................. 23
VIII - Objet SWbemlocator.........................................................................................................................................24
VIII-A - ConnectServer......................................................................................................................................... 24
VIII-B - Security.................................................................................................................................................... 25
IX - Objet SWbemSecurity........................................................................................................................................ 25
X - Objet SWbemServices.........................................................................................................................................25
X-A - GET.............................................................................................................................................................26
X-B - InstancesOf................................................................................................................................................. 26
X-C - ExecQuery.................................................................................................................................................. 27
XI - Objet SWbemObject........................................................................................................................................... 27
XII - Objet SWbemObjectSet.....................................................................................................................................27
XIII - Objet SWbemXXXXXSet.................................................................................................................................. 28
XIV - Objet SWbemProperty......................................................................................................................................28
XV - Objet SWbemObjectPath.................................................................................................................................. 29
XVI - Objet SWbemDateTime....................................................................................................................................29
XVII - Objet ISWbemNamedValue.............................................................................................................................29
XVIII - Objet SWbemPrivilege................................................................................................................................... 30
XIX - Objet SwbemQualifier...................................................................................................................................... 30
XX - Objet SWbemMethod........................................................................................................................................ 31
XXI - Objet SWbemEventSource...............................................................................................................................31
XXII - Objet SWbemLastError................................................................................................................................... 31
XXII-A - Codes d'erreur........................................................................................................................................32
XXIII - Objet SwbemSink........................................................................................................................................... 32
XXIII-A - Cancel....................................................................................................................................................33
XXIII-B - vnements...........................................................................................................................................33
XXIV - Objet SWbemServicesEx...............................................................................................................................33
XXV - Objet SWbemObjectEx................................................................................................................................... 34
XXVI - Objet SWbemRefresher................................................................................................................................. 34
XXVII - Objet SWbemRefreshableItem..................................................................................................................... 34
XXVIII - Annexe......................................................................................................................................................... 34
XXVIII-A - Exemple.............................................................................................................................................. 35
XXVIII-B - Rfrences d'ouvrage......................................................................................................................... 35
XXIX - WMI, seconde partie......................................................................................................................................35

-3-

Copyright 2004 Laurent Dardenne. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents,
images, etc. sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu' trois ans de prison et jusqu' 300 000 de dommages et intrts.
http://laurent-dardenne.developpez.com/articles/wmi-p1/

Windows Management Instrumentation (WMI), premire partie. par Laurent Dardenne

I - Avant propos
Test avec Delphi 5 sous XP pro.
Version 1.1
Dernire mise jour, le 06/07/2004

II - Introduction
Vous trouverez une introduction sur le principe de WMI ici.
Cet article contient de nombreux liens vers la documentation du SDK WMI.
WMI est bas sur la technologie COM, l'accs et la manipulation de WMI se font par l'intermdiaire des objets de
scripting SWbemxxxx qui encapsulent les appels COM et par certaines interfaces IWbemxxxx.
Web-Based Enterprise Management (WBEM) est une initiative de diffrents constructeurs afin de dvelopper des
moyens normaliss et non- propritaires permettant d'accder et de partager l'information lie l'infrastructure
(matriel et logiciel) d'un rseau d'entreprise.

-4-

Copyright 2004 Laurent Dardenne. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents,
images, etc. sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu' trois ans de prison et jusqu' 300 000 de dommages et intrts.
http://laurent-dardenne.developpez.com/articles/wmi-p1/

Windows Management Instrumentation (WMI), premire partie. par Laurent Dardenne

(c) Microsoft, SDK.


Nous utiliserons sous Delphi le scripting qui facilite la mise en uvre de WMI.

III - Dfinitions diverses


III-A - Espace de nom
Les classes CIM (Commun Information Model) sont organises dans des espaces de nom. Les espaces de nom
reprsentent le mcanisme de structuration des informations employes dans le rfrentiel CIM, ils contrlent la
porte et la visibilit des dfinitions de classe des ressources gres.
Chaque espace de nom du rfrentiel CIM contient un groupe logique de classes reprsentant une technologie
spcifique ou un domaine de gestion.
Les espaces de nom ne sont pas des emplacements physiques; ce sont plutt des bases de donnes logiques. Ils
contiennent des classes et des instances spcifiques.
-5-

Copyright 2004 Laurent Dardenne. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents,
images, etc. sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu' trois ans de prison et jusqu' 300 000 de dommages et intrts.
http://laurent-dardenne.developpez.com/articles/wmi-p1/

Windows Management Instrumentation (WMI), premire partie. par Laurent Dardenne

Chaque installation de WMI contient un espace de nom Root, qui contient uniquement d'autres espaces de nom.
L'espace de nom Root contient les espaces de nom Default, Security, CIMv2, et tous les espaces de nom dfinis
par l'utilisateur.
Exemple de classe : Win32_ComputerSystem dans l'espace de nom CIMV2 accessible via Root\CIMV2.
Toutes les classes dans un espace de nom doivent avoir un nom unique de classe, et des classes dans un espace
de nom ne peuvent pas tre drives dans un autre espace de nom, c'est pourquoi vous trouverez dupliques les
classes system, core, et les common class dans de multiples espaces de nom.
En d'autres termes, si vous voulez dfinir une classe Camion drive d'une classe Vhicule, la classe Vhicule doit
tre dfinie dans le mme espace de nom.
La plupart des classes que Windows gre rsident dans l'espace de nom root\CIMv2. Cependant, root\CIMv2 n'est
pas le seul espace de nom auquel vous devez prter attention, comme suggr sur le schma suivant.

(c) Microsoft, SDK.


Par exemple les providers de l'event log, de Windows Installer, et de Win32 stockent toutes leurs dfinitions de classe
des ressources gres dans l'espace de nom Root\CIMV2.
-6-

Copyright 2004 Laurent Dardenne. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents,
images, etc. sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu' trois ans de prison et jusqu' 300 000 de dommages et intrts.
http://laurent-dardenne.developpez.com/articles/wmi-p1/

Windows Management Instrumentation (WMI), premire partie. par Laurent Dardenne

D'autre part, le provider de la base de registre stocke ses dfinitions de classe dans l'espace de nom Root\Default.
Et le nouveau provider du serveur DNS de Windows 2003 stocke ses dfinitions de classe des ressources gres
dans l'espace de nom Root\MicrosoftDNS.
voir

III-B - Chemin d'objet d'un espace de nom WMI


Un chemin d'objet d'un espace de nom dcrit l'emplacement d'un espace de nom particulier sur un serveur. Il contient
un nom de serveur et un nom d'espace de nom, et est format soit en utilisant le slash ou le backslash. Le nom de
serveur spcifie le nom rseau de l'ordinateur o l'espace de nom est situ :
\\Serveur\EspaceDeNom ou //Serveur/EspaceDeNom
Si Serveur est l'ordinateur local, vous pouvez utiliser un simple point la place du nom de serveur : \\.\EspaceDeNom
Le nom EspaceDeNom spcifie un espace de nom valide. Un espace de nom est reprsent par une chane
hirarchique contenant les lments dlimits par un simple backslash, tel que root\cimv2. Vous ne pouvez pas
utiliser le slash dans un nom d'espace de nom, la syntaxe suivante n'est pas autorise : root/cimv2.

III-C - Chemin d'objet de classe


Un chemin d'objet de classe dcrit l'emplacement d'une classe dans un espace de nom.
Vous pouvez utiliser soit un nom de chemin complet soit un nom de chemin relatif.
Un chemin complet de classe ajoute le nom de la classe un chemin d'espace de nom.
\\Admin\Root\CimV2:Win32_LogicalDisk
L'exemple prcdent dcrit l'emplacement de la classe Win32_LogicalDisk dans l'espace de nom \root\cimv2 sur le
serveur nomm Admin.
Un chemin de classe relatif reprsente une classe qui se trouve dans l'espace de nom courant.
Un chemin de classe relatif d'une classe contient seulement le nom de classe.
Win32_LogicalDisk
Cet exemple suppose que la classe Win32_LogicalDisk se trouve dans l'espace de nom courant.

III-D - Chemin d'objet d'instance


Un chemin d'objet d'instance dcrit l'emplacement d'une instance d'une classe donne dans un espace de nom
spcifique. Vous pouvez avoir plusieurs types de chemin d'objet

III-D-1 - Complet
Un chemin complet d'objet d'instance ajoute le nom et la valeur d'une proprit de la classe un chemin complet
d'objet de classe.
\\Server\Namespace:Class.KeyName= KeyValue
-7-

Copyright 2004 Laurent Dardenne. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents,
images, etc. sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu' trois ans de prison et jusqu' 300 000 de dommages et intrts.
http://laurent-dardenne.developpez.com/articles/wmi-p1/

Windows Management Instrumentation (WMI), premire partie. par Laurent Dardenne

Exemple : "\\Machine\root\cimv2:Win32_Directory.Name="c:\windows\system32\wbem"

III-D-2 - Relatif
Un chemin d'instance relatif se rapporte une instance situe dans l'espace de nom courant sur le serveur courant.
Le chemin relatif comprend le nom de classe suivi des noms et des valeurs de cette instance.
MyClass.MyProp="e:"

III-D-3 - Relatif avec un simple nom


Pour des classes avec seulement une proprit indique par la valeur, vous pouvez omettre le nom de la proprit.
MyClass="e:"

III-D-4 - Relatif avec de multiple valeur


Utiliser une virgule pour sparer les valeurs.
MyOtherClass.FirstKey=1,SecondKey=2

III-D-5 - Relatif pour une classe singleton


Le chemin relatif pour une classe singleton consiste utiliser la notation =@".
MySingletonClass=@

III-E - Instance
Une instance reprsente un objet ou un lment du monde rel. Une instance est toujours cre partir d'une classe
reprsentant le template de l'objet rel. Par exemple, une instance de disque reprsente un disque rel et son
template est dfini par la classe Disk.

III-F - Provider
Un provider (fournisseur de donnes) est un objet COM qui agit en tant qu'intermdiaire entre WMI et un objet
gr. Au travers de WMI, une application peut demander et envoyer des informations vers l'objet gr. Il expose
les classes WMI.
Par exemple, une application peut modifier et rechercher des informations de la base de registre via WMI par
l'intermdiaire du provider nomm System Registry Provider.
Il existe plusieurs types de provider :

Provider d'instance
cf. classe __InstanceProviderRegistration
Provider de classe
cf. classe __ClassProviderRegistration
Provider de mthode
cf. classe __MethodProviderRegistration
Provider de proprits
-8-

Copyright 2004 Laurent Dardenne. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents,
images, etc. sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu' trois ans de prison et jusqu' 300 000 de dommages et intrts.
http://laurent-dardenne.developpez.com/articles/wmi-p1/

Windows Management Instrumentation (WMI), premire partie. par Laurent Dardenne

cf. classe __PropertyProviderRegistration


Provider d'vnement
cf. classe __EventProviderRegistration
Provider d'vnement client
cf. classe __EventConsumerProviderRegistration

III-G - Modes d'appel des mthodes


III-G-1 - Mode synchrone
Le mode synchrone se produit quand le programme ou le script attend jusqu' ce que l'appel d'une mthode renvoie
une collection d'objet de type SWbemObjectSet. WMI construit cette collection en mmoire avant de renvoyer l'objet
de type collection au programme appelant.
Le mode synchrone peut avoir un impact sur les performances d'un programme ou d'un script. Par exemple, la
recherche synchrone de milliers d'vnements dans l'Event log ncessite un long moment et beaucoup de mmoire
car WMI cre un objet pour chaque vnement puis insre ces objets dans une collection avant de la retourner
la mthode appelante.
Vous devriez appeler les mthodes en mode synchrone seulement si elles renvoient peu de donnes. Les mthodes
suivantes de SWbemServices peuvent s'appeler sans risque en mode synchrone :

SWbemServices.Delete
SWbemServices.ExecMethod
SWbemServices.Get

Toutes les mthodes de SwbemServices ne comportant pas le mot Async dans leur nom peuvent s'appeler en
mode synchrone en renseignant le plus souvent le paramtre iFlags avec la valeur wbemFlagReturnWhenComplete.

III-G-2 - Mode asynchrone


Le mode asynchrone se produit quand le programme ou le script continue s'excuter aprs avoir appel la mthode.
WMI renvoie chaque objet cre vers un objet de type SwbemSink (collecteur de donnes) et ce pour tous les objets
de la mthode appele. Le script ou programme appelant doit utiliser un objet de SWbemSink et un gestionnaire
d'vnement de type SWbemSink.OnObjectReady pour traiter les objets retourns.
Alors que ce mode d'excution n'a pas les impacts sur les performances et les ressources du mode synchrone, le
mode asynchrone peut impacter la scurit car les rsultats stocks dans l'objet de type SWbemSink peuvent ne pas
provenir du programme ou du script appelant. WMI abaisse le niveau d'authentification sur l'objet de type SWbemSink
jusqu' ce que la mthode russisse. Pour attnuer ces risques de scurit
Le mode asynchrone est utilis pour les mthodes suivantes :

SWbemServices.AssociatorsOfAsync
SWbemServices.DeleteAsync
SWbemServices.ExecMethodAsync
SWbemServices.ExecNotificationQueryAsync
SWbemServices.ExecQueryAsync
SWbemServices.InstancesOfAsync
SWbemServices.ReferencesToAsync
SWbemServices.SubclassesOfAsync

-9-

Copyright 2004 Laurent Dardenne. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents,
images, etc. sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu' trois ans de prison et jusqu' 300 000 de dommages et intrts.
http://laurent-dardenne.developpez.com/articles/wmi-p1/

Windows Management Instrumentation (WMI), premire partie. par Laurent Dardenne

III-G-3 - Mode semi-synchrone


Le mode semi-synchrone est semblable au mode asynchrone car le programme ou le script continue son droulement
aprs avoir appel la mthode. En mode semi-synchrone, WMI recherche les objets en tche de fond tant que votre
script ou programme continue de fonctionner. WMI renvoie chaque objet retourn par la mthode appel, juste aprs
que l'objet soit cr.
Puisque WMI contrle l'objet, le mode semi-synchrone est plus scuris que le mode asynchrone. Cependant si vous
employez le mode semi-synchrone avec plus de 1.000 instances, la rcupration des instances peut monopoliser les
ressources disponibles et donc dgrader les performances du programme ou du script et de l'ordinateur l'excutant.
Chaque objet utilise les ressources ncessaires jusqu' ce que la mmoire soit libre.
Pour travailler dans ce mode, vous pouvez appeler la mthode en renseignant le paramtre iFlags avec
wbemFlagForwardOnly + wbemFlagReturnImmediately pour signaler WMI de renvoyer une collection appele
forward-only'. Une collection de ce type limine le problme de performance provoqu par un grand nombre de
donnes, en librant la mmoire aprs que l'objet soit numr.
la diffrence d'une collection SwbemObjectSet tandard, WMI ne maintient pas de rfrences sur les objets de la
collection. L'inconvnient tant que l'on ne peut plus appeler la mthode SwbemObject.Clone sur cet objet.
N'importe quelle mthode de SWbemServices qui ne peut pas s'appeler soit en mode synchrone soit en mode
asynchrone s'appellera en mode semi-synchrone.
Les mthodes suivantes sont appeles en mode semi-synchrone :

SWbemServices.AssociatorsOf
SWbemServices.Delete
SWbemServices.ExecMethod
SWbemServices.ExecNotificationQuery
SWbemServices.ExecQuery
SWbemServices.Get
SWbemServices.InstancesOf
SWbemServices.ReferencesTo
SWbemServices.SubclassesOf
SWbemServices.Put

III-H - vnement
Les vnements de WMI sont des occurrences qui correspondent aux situations qui surviennent soit dans le monde
rel, soit lors de changements dans le rfrentiel CIM gr par le manager d'objet CIM (CIMOM , Common Information
Model Object Manager).
Aprs un vnement, une notification le concernant est gnre soit par un provider d'vnement, soit par le manager
d'objet CIM lui-mme. Les notifications sont fournies par le manager d'objet CIM un ou plusieurs destinataires
enregistrs connus comme clients d'vnements.

Les providers d'vnement envoient des notifications en rponse aux occurrences d'vnement, que des
clients soient ou non enregistrs.
Les clients d'vnement s'enregistrent pour recevoir des notifications sans savoir comment et par qui les
vnements et leurs notifications correspondantes sont fournis. Les clients s'enregistrent pour recevoir des
notifications en indiquant un filtre, cr en utilisant le langage d'interrogation WQL de WMI. La requte dcrit
les conditions dans lesquelles le client est configur pour recevoir une notification.

- 10 -

Copyright 2004 Laurent Dardenne. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents,
images, etc. sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu' trois ans de prison et jusqu' 300 000 de dommages et intrts.
http://laurent-dardenne.developpez.com/articles/wmi-p1/

Windows Management Instrumentation (WMI), premire partie. par Laurent Dardenne

III-H-1 - Rception d'un vnement de WMI


WMI contient une infrastructure d'vnement qui gnre des notifications lors de changements de donnes et de
services de WMI.
Par exemple, si une application cre un nouvel objet dans le rfrentiel CIM de WMI, WMI gnre un vnement
nomm '__ InstanceCreationEvent'.
Vous pouvez crer une requte semi-synchrone ou asynchrone pour surveiller les changements dans l' Event logs,
la cration de processus, le statut d'un service, la disponibilit d'un ordinateur ou l'espace libre d'un disque, etc
La notification d'un changement sur les donnes standard de WMI s'appelle un vnement intrinsque.
Par exemple les vnements __ InstanceCreationEvent' ou __ NamespaceDeletionEvent' sont des vnements
intrinsques.
La notification d'un changement qu'un provider fait pour dfinir un vnement le concernant s'appelle un vnement
extrinsque.
Par exemple, les providers System Registry, Power Management Event, et Win32 dfinissent leurs propres
vnements.
Typiquement, une classe qui dfinit un vnement a un nom se terminant par le mot Event . Par exemple, le provider
Win32 a la classe Win32_NTLogEvent. Quand un provider possde une classe d'vnement, vous effectuez une
requte pour un vnement intrinsque.
La requte suivante
SELECT all FROM __InstanceCreationEvent
WHERE TargetInstance ISA 'Win32_NTLogEvent'

est une requte sous Windows NT et 2000 pour l'vnement intrinsque __InstanceCreationEvent' de la classe
d'vnement Win32_NTLogEvent.
Notez que le privilge SeSecurityPrivilege doit tre positionn.
La requte suivante
SELECT * FROM RegistryValueChangeEvent
WHERE Hive='HKEY_LOCAL_MACHINE' and
Keypath='SYSTEM\\ControlSet001\\Control' and
Valuename = 'CurrentUser'"

montre l'vnement extrinsque '__ RegistryValueChangeEvent' du provider de base de registre. Le script cre un
client provisoire en appelant la mthode SWbemServices.ExecNotificationQueryAsync, et reoit des vnements
seulement lorsque le script est excut.
Notez que cet appel est asynchrone et peut tre scuris seulement sous Windows Server 2003.

III-H-2 - Rception d'vnements


Vous pouvez surveiller ou utiliser des vnements de manire temporaire ou permanente tant qu'un script ou une
application fonctionne.

- 11 -

Copyright 2004 Laurent Dardenne. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents,
images, etc. sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu' trois ans de prison et jusqu' 300 000 de dommages et intrts.
http://laurent-dardenne.developpez.com/articles/wmi-p1/

Windows Management Instrumentation (WMI), premire partie. par Laurent Dardenne

III-H-2-a - Client d'vnement provisoire


Un client d'vnement provisoire (Temporary event consumers) est une application WMI cliente qui reoit un
vnement de WMI. WMI inclut une interface unique que vous pouvez utiliser pour indiquer les vnements que WMI
envoie une application cliente. Un client d'vnement provisoire est considr comme provisoire parce que cela
fonctionne seulement partir du moment o l'application est excute par un utilisateur.
Pour plus d'information

III-H-2-b - Client d'vnement permanent


Un client d'vnement permanent est un objet COM qui peut recevoir un vnement de WMI tout moment. Un client
d'vnement permanent emploie un ensemble d'objets persistants et de filtres pour capturer un vnement de WMI.
Comme pour un client d'vnement provisoire, vous initialisez une srie d'objets et de filtres WMI qui capturent un
vnement de WMI. Quand un vnement correspondant un filtre se produit, WMI charge le client d'vnement
permanent et l'informe au sujet de l'vnement. Puisqu'un client permanent est implment dans le rfrentiel WMI et
qu'un fichier excutable est enregistr dans WMI, la livraison d'un vnement lors du reboot du systme d'exploitation
continue tant que WMI fonctionne.
Pour plus d'information
Les scripts ou les applications qui reoivent des vnements ont des considrations spciales concernant la scurit.

III-H-2-c - Mise disposition d'vnements et utilisation de clients standards


Un provider d'vnement est un composant COM qui envoie un vnement WMI. Vous pouvez crer un provider
d'vnement pour envoyer un vnement dans une application Delphi, C++ ou C#. La plupart des providers
d'vnement grent un objet pour WMI, par exemple une application ou un lment matriel.
Une application ou un script peut employer un provider d'vnement intgr WMI que proposent les classes clientes
standards prinstalles. Chaque classe cliente standard rpond un vnement par une action diffrente en envoyant
un E-mail ou en excutant un script. Vous n'avez pas crire le code du provider pour employer une classe cliente
standard permettant de crer un client d'vnement permanent.
Un vnement synchronis ou rptitif est un vnement qui se produit un moment prdtermin. WMI fournit les
deux manires suivantes pour crer un vnement synchronis ou rptitif dans vos applications.

L'infrastructure standard d'vnement de Microsoft.


Une classe spcialise de timer.

III-I - Authentification
L'authentification signifie qu'un processus s'identifie l'autre. Typiquement, l'authentification est une identification
par mot de passe.
Le client doit fournir des informations d'identification pour permettre aux serveurs de vrifier cette entit. Une fois que
l'identit est connue, l'application peut autoriser l'entit accder aux ressources du systme.

- 12 -

Copyright 2004 Laurent Dardenne. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents,
images, etc. sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu' trois ans de prison et jusqu' 300 000 de dommages et intrts.
http://laurent-dardenne.developpez.com/articles/wmi-p1/

Windows Management Instrumentation (WMI), premire partie. par Laurent Dardenne

III-J - Impersonation
Le principe d'usurpation d'identit (impersonation en anglais) est local, et correspond au concept de dlgation,
lorsqu'il s'opre entre machines physiques diffrentes. Il dtermine les droits qu'un client accorde un serveur pour
appeler diffrents processus.
Comme l'emprunt d'identit (il s'agit de se faire passer pour quelqu'un d'autre, prtendre tre quelqu'un d'autre),
ce dispositif permet un processus serveur de s'excuter en utilisant les informations d'identification du client.
Cependant, la dlgation va plus loin en autorisant le processus serveur appeler d'autres ordinateurs au nom du
client.
L'usurpation d'identit est la capacit d'un thread de s'excuter dans un contexte de scurit qui est diffrent du
contexte du processus qui possde le thread. En s'excutant dans le contexte de scurit du client, le serveur est ,
un certain niveau, le client.
Le thread serveur emploie un token d'accs reprsentant les droits du client pour obtenir l'accs aux objets auxquels
le client a accs.
La principale raison de l'usurpation d'identit est d'effectuer des contrles d'accs afin d'tre excut avec l'identit
du client. Employer l'identit du client pour des contrles d'accs permet de rduire ou d'largir l'accs, selon ce que
le client a la permission de faire.
Par exemple, supposez qu'un serveur de fichiers possde des dossiers contenant des informations confidentielles
et que chacun de ces dossiers soit protg par un ACL. Pour empcher un client d'obtenir l'accs non autoris aux
informations dans ces dossiers, le serveur peut se faire passer pour le client avant d'accder aux dossiers.
voir

III-J-1 - Utilisation de la base de registre pour dfinir le niveau d'usurpation d'identit


Si vous avez les droits sur la cl de registre suivante, vous pourrez modifier le niveau d'usurpation d'identit par
dfaut. Cette cl spcifie avec quel niveau d'usurpation d'identit les scripts WMI sont excuts jusqu' ce qu'un
autre soit spcifi.
Chemin de la cl :
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\WBEM\Scripting\Default Impersonation Level
Par dfaut cette cl contient la valeur 3.
Quelques providers peuvent ncessiter un niveau de scurit plus lev.

III-K - Windows Management Instrumentation Query Language


Le langage d'interrogation de WMI (WQL) est un sous-ensemble du langage d'interrogation structur SQL ANSI
comportant quelques changements smantiques mineurs. A la diffrence de SQL, WQL interroge des classes et
non des tables, et retourne des classes et/ou des instances au lieu de lignes. Attention WQL n'est pas du SQL mais
y ressemble.
WQL est un langage d'interrogation uniquement (Read-Only), on ne peut pas modifier le rfrentiel CIM par les
instructions Insert ,Update et Delete, elles ne sont donc pas permises.

- 13 -

Copyright 2004 Laurent Dardenne. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents,
images, etc. sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu' trois ans de prison et jusqu' 300 000 de dommages et intrts.
http://laurent-dardenne.developpez.com/articles/wmi-p1/

Windows Management Instrumentation (WMI), premire partie. par Laurent Dardenne

WQL fournit des moyens de choisir quelles proprits sont intressantes et il peut tre utilis pour rduire le nombre
de proprits retournes.
Il existe 3 types d'interrogations :

Data queries : retrouve des instances de classes et des informations concernant les associations
d'instances.
Schema queries : retrouve des dfinitions de classes et des informations concernant les associations de
schma.
Event queries : utilis par des clients d'vnements (temporaires ou permanents). Permet de filtrer les
vnements.

Certains oprateurs WQL ne peuvent tre utiliss qu'avec certains types d'interrogation, par exemple l'oprateur
LIKE ne peut tre utilis qu'avec des interrogations de type Data queries.
La requte suivante interroge le fichier Application de l'event log de Windows NT partir de toutes les instances
de Win32_NTLogEvent.
wmiObjectSet := wmiServices.ExecQuery('SELECT * FROM Win32_NTLogEvent WHERE Logfile = 'Application'',
'WQL',
wbemFlagReturnImmediately, nil);

Note : L'installation du produit SMS de Microsoft ajoute des oprateurs au langage WQL.

III-L - Fichier MOF


Le langage Managed Object Format (MOF) permet, entre autres, de dcrire une nouvelle classe CIM, il est bas sur
le langage Interface Definition Language (IDL), le langage de description d'interfaces COM.
Un dveloppeur peut par exemple crire une classe CIM qui dcrit un bras de robot d'une chane de fabrication ou
une nouvelle application de traitement de texte.
Une fois que le dveloppeur raliser la description de classe CIM, le compilateur MOF
(C:\WINDOWS\system32\wbem\mofcomp.exe) analyse dans le fichier .mof les classes CIM respectives puis ajoute
ces classes dans le rfrentiel WMI. De l, une application ou un provider peut accder aux classes CIM par les
interfaces COM standard.
Le compilateur MOF est intgr la distribution de WMI et est install par dfaut sur Windows Millennium, 2000 et XP.
Core WMI :
95,98 et 98 SE
Windows NT4
Vous trouverez un exemple de fichier .mof ici
Attention certaines classes ne sont disponibles que sur certaines plateformes telles que W2K ou XP ou encore
uniquement sous Windows Server 2003. Cf SDK WMI

IV - Meta-schmas
Le mtaschma est une dfinition formelle du modle. Il dfinit les limites employes pour exprimer le modle, son
utilisation et sa smantique. UML est employ pour dfinir la structure du mtaschma.
Meta-schmas issue des spcifications de CIM V2.8.1
- 14 -

Copyright 2004 Laurent Dardenne. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents,
images, etc. sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu' trois ans de prison et jusqu' 300 000 de dommages et intrts.
http://laurent-dardenne.developpez.com/articles/wmi-p1/

Windows Management Instrumentation (WMI), premire partie. par Laurent Dardenne

(c) Distributed Management Task Force, Inc.


Dtails du schma sur le site de l'organisation DTMF
WMI est l'implmentation par Microsoft de CIM pour la plate-forme Windows.
D'autres schmas :
CIM Schema: Version 2.8.1 (Final)
Tutorial Microsoft WMI, chapitre 'CIM Structure and Navigation'

IV-A - Types de Classe CIM


IV-A-1 - Classes abstraite (abstract class)
Une classe abstraite est un template employ pour dfinir de nouvelles classes.
Elles servent de classes de base d'autres classes abstraites, statiques, et dynamiques.
Presque toutes les classes de WMI sont construites ou drives d'une ou plusieurs classes abstraites.
Vous pouvez identifier une classe abstraite en examinant le qualificateur Abstract de la classe.
Une classe abstraite doit dfinir le qualificateur Abstract et renseigner sa valeur True.
L'utilisation la plus courante du type classe abstraite est la dfinition du noyau et des classes communes (core and
common class). Elles sont rarement utilises dans des scripts car vous ne pouvez pas retrouver d'instances de classe
abstraite.

IV-A-2 - Classe statique


Une classe statique dfinit les donnes qui sont physiquement stockes dans le rfrentiel CIM.

- 15 -

Copyright 2004 Laurent Dardenne. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents,
images, etc. sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu' trois ans de prison et jusqu' 300 000 de dommages et intrts.
http://laurent-dardenne.developpez.com/articles/wmi-p1/

Windows Management Instrumentation (WMI), premire partie. par Laurent Dardenne

Les classes statiques sont instancies comme les classes dynamiques. Cependant, elles sont stockes dans le
rfrentiel CIM. De mme, des instances de classe statiques sont recherches directement dans le rfrentiel CIM.
Elles n'emploient pas de Provider.
Vous pouvez identifier une classe statique en examinant les qualificateurs de classe. Cependant, la diffrence
des classes abstraite et dynamiques qui sont identifies par la prsence d'un qualificateur spcifique, les classes
statiques sont identifies par l'absence des qualificateurs Abstract et Dynamic.
L'utilisation la plus courante du type classe statique est la dfinition de classes systme (system classes). Les classes
statiques sont rarement employes dans des scripts WMI.

IV-A-3 - Classe dynamique


Une classe dynamique est une classe qui modlise une ressource gre par WMI et qui est retrouve dynamiquement
par un provider.
Vous pouvez identifier une classe dynamique en examinant le qualificateur Dynamic de la classe. Une classe
dynamique doit dfinir le qualificateur Dynamic et renseigner sa valeur True.
L'utilisation la plus courante du type de classe dynamique est dans la dfinition de classes tendues. Les classes
dynamiques sont les types de classes les plus utilises dans les scripts WMI.

IV-A-4 - Classe d'association


Un quatrime type de classe, connu sous le nom de classe d'association, est galement support. Une classe
d'association est une classe abstraite, statique ou dynamique qui dcrit un rapport entre deux classes.
La classe de Win32_SystemServices est un exemple d'une classe dynamique d'association qui dcrit le rapport entre
un ordinateur et les services fonctionnant sur l'ordinateur.
Vous pouvez identifier une classe d'association en examinant le qualificateur Association de la classe. Une classe
d'association abstraite, statique ou dynamique doit dfinir le qualificateur Association et renseigner sa valeur True.

IV-B - Proprits
Les proprits sont des noms qui dcrivent une ressource gre. Les classes utilisent des proprits pour dcrire des
choses comme l'identit, la configuration, et l'tat d'une ressource gre. Par exemple les services (Win32_Service)
ont un nom, un nom d'affichage, une description, un type de dmarrage, et un statut.
Chaque proprit a un nom, un type, et des qualificateurs de proprit facultatifs.
Certaines proprits peuvent tre des cls permettant l'unicit sur des noms d'instance par exemple.

IV-C - Mthodes
Les mthodes effectuent une action sur une ressource gre.
Exemple : Que pouvez-vous faire avec des services ? Vous pouvez les dmarrer, les arrter, les mettre en pause.
Chaque mthode a un nom, un type de retour, des paramtres facultatifs, et des qualificateurs de mthode facultatifs.
Certaines classes peuvent ne pas dfinir de mthode.

- 16 -

Copyright 2004 Laurent Dardenne. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents,
images, etc. sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu' trois ans de prison et jusqu' 300 000 de dommages et intrts.
http://laurent-dardenne.developpez.com/articles/wmi-p1/

Windows Management Instrumentation (WMI), premire partie. par Laurent Dardenne

IV-D - Trigger
Un trigger est une reconnaissance d'un changement d'tat (comme la cration, la suppression, la mise jour ou
l'accs) d'une instance de classe ou la mise jour ou l'accs une proprit.
Note : L'implmentation de WMI n'a pas d'objet reprsentant explicitement un trigger.
Les triggers sont implicites soit lors d'oprations sur les objets de base du systme (cration, suppression, et
modification de classes, d'instances et d'espaces de nom), soit lors d'vnements dans l'environnement gr.

IV-E - Qualificateur de proprit WmiEventTrigger( data-item-name )


Indique le nom d'une donne dans un bloc d'vnement qu'un client WMI peut renseigner pour dfinir la valeur du
trigger d'vnement.
Exemple : si l'vnement TooHot est qualifi avec WmiEventTrigger("TooHotTemperature"), un client WMI pourrait
renseigner la proprit TooHotTemperature pour indiquer au driver d'envoyer l'vnement TooHot quand le matriel
a atteint la valeur dfinie par l'utilisateur.

IV-F - Indication
Une indication est une instance d'objet cr en raison de l'occurrence d'un vnement. Puisque les indications sont
des sous-types de classe, elles peuvent avoir des proprits et des mthodes, et tre ordonnes dans un type
hirarchique.
Une indication a typiquement comme consquence un vnement.
Dans l'exemple d'une classe Service, lorsque le service s'arrte et que le trigger s'excute, il a comme consquence
une indication qui sert de notification indiquant que le service est arrt.

IV-G - Rfrence
Une rfrence est :

Un type spcial de proprit


Un pointeur vers une autre instance

Une rfrence dfinit le rle que chaque objet joue dans une association. La rfrence reprsente le nom de rle
d'une classe dans le contexte d'une association.
Par exemple dans la classe Win32_POTSModemToSerialPort la proprit Antecedent rfrence l'instance
Win32_SerialPort reprsentant le port srie utilis par le modem.

IV-H - Schma
Reprsente une collection de dfinitions de classe qui dcrit les objets grs dans un environnement particulier.
Un schma est un groupe de classes avec un propritaire unique. Les schmas sont employs pour l'administration
et le nommage des classes. Les noms de classe doivent tre uniques dans leurs schmas propritaires.
Le SDK utilise 2 schmas : le schma CIM et le schma Win32. Dans le schma CIM le nom des classes dbute
par CIM_, et dans le schma Win32 le nom des classes dbute par Win32_. Le schma CIM contient les dfinitions
- 17 -

Copyright 2004 Laurent Dardenne. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents,
images, etc. sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu' trois ans de prison et jusqu' 300 000 de dommages et intrts.
http://laurent-dardenne.developpez.com/articles/wmi-p1/

Windows Management Instrumentation (WMI), premire partie. par Laurent Dardenne

pour le noyau et pour les classes communes, tandis que le schma Win32 contient les dfinitions pour les classes
tendues qui sont communes l'environnement Win32.

IV-I - Qualificateurs
Les qualificateurs sont des adjectifs qui fournissent des informations additionnelles au sujet de la classe, de la
proprit ou de la mthode laquelle ils s'appliquent. Par exemple le qualificateur de la classe nomm Dynamic
rpond la question Quel est le type de classe de Win32_Service ? .
Dans les premiers temps d'utilisation de WMI vous rechercherez simplement des informations.
Ensuite si vous souhaitez modifier des proprits ou appeler des mthodes, les qualificateurs deviennent de plus
en plus importants car ils dfinissent les caractristiques oprationnelles de la proprit que vous mettez jour ou
de la mthode que vous appelez.

IV-J - Quel genre d'information les qualificateurs fournissent-ils ?


IV-J-1 - Qualificateurs de classe
Les qualificateurs de classe fournissent des informations oprationnelles sur une classe.
Par exemple :

Comme vous l'avez vu prcdemment, les qualificateurs Abstract, Dynamic et Association vous indiquent
le type de classe. Le qualificateur Provider vous indique le provider qui gre la classe. Par exemple, le
qualificateur Provider pour la classe Win32_Service vous indique que la classe emploie le provider CIMWin32
(cimwin32.dll).
D'autre part, la classe Win32_NTLogEvent utilise le provider MS_NT_EVENTLOG_PROVIDER (ntevt.dll)
comme indiqu par le qualificateur Provider de la classe Win32_NTLogEvent.
Le qualificateur Privileges vous informe des privilges spciaux requis pour utiliser la classe. Par exemple, le
qualificateur Privileges de la classe Win32_NTLogEvent vous indique que le privilge SeSecurityPrivilege doit
tre positionn (enabled) avant que la classe Win32_NTLogEvent puisse grer le log de scurit.

IV-J-2 - Qualificateurs de proprit


Les qualificateurs de proprit fournissent des informations au sujet de chaque proprit.
Par exemple :

Le qualificateur CIMType vous indique le type de donnes de la proprit. Le qualificateur Read indique que
la proprit est en lecture.
Le qualificateur Write indique si vous pouvez ou non modifier la valeur de proprit. Par exemple, la proprit
ASPScriptDefaultNamespace de la classe Win32_WMISetting est indique comme modifiable. D'autre part,
toutes les proprits de la classe Win32_Service sont dfinies comme read-only, elles ne dfinissent donc
pas le qualificateur Write.
Le qualificateur Key indique que la proprit est une clef de classe et est employe pour identifier des
instances uniques d'une ressource gre dans une collection de ressources identiques.

IV-J-3 - Qualificateurs de mthode


Les qualificateurs de mthode fournissent des informations au sujet de chaque mthode.
Par exemple :

Le qualificateur Implemented indique que la mthode a une implmentation fournie par un provider.

- 18 -

Copyright 2004 Laurent Dardenne. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents,
images, etc. sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu' trois ans de prison et jusqu' 300 000 de dommages et intrts.
http://laurent-dardenne.developpez.com/articles/wmi-p1/

Windows Management Instrumentation (WMI), premire partie. par Laurent Dardenne

Le qualificateur ValueMap dfinit un ensemble de valeurs permises pour un paramtre de mthode ou un


type de retour.
Le qualificateur Privileges vous informe des privilges spciaux requis pour appeler la mthode.

Note :
Il existe beaucoup plus de qualificateurs que ceux mentionns ici. Voir la liste complte
Les qualificateurs Standard WMI (Amemdment, Deprecated, etc) ont t ajouts par Microsoft et ne sont pas dans
les spcifications CIM.

IV-K - Extension du schma


Intel semble tendre ce schma en ajoutant des fonctionnalits de diagnostic appel CDM (Common Diagnostic
Model).

IV-L - WMI Tester


Vous pouvez maintenant examiner les proprits, les mthodes, et les qualificateurs d'une classe l'aide de l'outil
C:\WINDOWS\system32\wbem\wbemtest.exe.
Connexion sur Root\CIMV2' puis,
menu Ouvrir une classe', saisir Win32_Service' ou bien
menu Enumrer les classes', cliquer sur Ok' sans renseigner le champ Superclasse', double-cliquer sur la classe
abstraite __SystemClass'.

(c) Microsoft, SDK.

IV-L-1 - Requte WQL


Slectionner le menu Requte',
- 19 -

Copyright 2004 Laurent Dardenne. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents,
images, etc. sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu' trois ans de prison et jusqu' 300 000 de dommages et intrts.
http://laurent-dardenne.developpez.com/articles/wmi-p1/

Windows Management Instrumentation (WMI), premire partie. par Laurent Dardenne

saisir ASSOCIATORS OF {Win32_LogicalDisk.DeviceID="C:"} WHERE AssocClass = Win32_SystemDevices


Rsultat : Win32_ComputerSystem.Name="nom_de_votre_ordinateur"

V - Paramtrage WMI et outils divers


V-A - Configurer les paramtres de WMI
Vous pouvez utiliser MMC avec la console suivante : C:\WINDOWS\system32\wmimgmt.msc

V-A-1 - Accorder des autorisations des utilisateurs ou des groupes, et dfinir des niveaux
d'autorisation
Vous pouvez autoriser l'accs un utilisateur ou un groupe afin qu'ils effectuent des tches et des services WMI.
Pour chaque utilisateur ou groupe autoris, vous devez dfinir un niveau d'autorisation pour des espaces de noms
spcifiques. Vous pouvez, par exemple, habiliter un groupe grer les objets CIM (Common Information Model) de
l'infrastructure de gestion Windows sur l'ordinateur local de chaque membre du groupe.

V-A-2 - Configurer l'enregistrement des erreurs


Vous pouvez activer/dsactiver l'enregistrement des erreurs ; si l'enregistrement est activ, vous pouvez le configurer
de telle sorte qu'il rende compte uniquement des erreurs (configuration par dfaut) ou de toutes les actions.
L'enregistrement des erreurs peut vous aider rsoudre les problmes WMI. Vous pouvez galement dfinir une
taille maximale des fichiers journaux et l'emplacement du dossier correspondant.

V-A-3 - Effectuer une sauvegarde de l'espace de stockage


Vous pouvez configurer le contrle WMI de sorte qu'une sauvegarde de votre espace de stockage soit effectue
intervalles rguliers ou vous pouvez excuter cette sauvegarde manuellement n'importe quel moment. On entend
par espace de stockage ou rfrentiel, la base de donnes laquelle vous pouvez accder l'aide de WMI. Vous
avez galement la possibilit de restaurer une version prcdente de l'espace de stockage.

V-A-4 - Modifier l'espace de noms de script


Vous pouvez modifier l'espace de noms par dfaut cibl dans les scripts WMI.

V-A-5 - Se connecter en tant qu'un autre utilisateur


Vous pouvez ouvrir une session sous un nom d'utilisateur diffrent pour modifier les paramtres du contrle WMI.
Si, par exemple, vous avez dfini un compte d'utilisateur administratif sur plusieurs stations de travail, vous pouvez
vous connecter celles-ci sous le nom d'utilisateur correspondant.
L'espace de nom nomm WMI permet d'effectuer les mmes tches d'administration.

V-B - Outils
Tutorial DTMF du Mtaschmas
Tutorial Microsoft WMI
Documentation de Winmgt.exe

- 20 -

Copyright 2004 Laurent Dardenne. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents,
images, etc. sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu' trois ans de prison et jusqu' 300 000 de dommages et intrts.
http://laurent-dardenne.developpez.com/articles/wmi-p1/

Windows Management Instrumentation (WMI), premire partie. par Laurent Dardenne

V-C - WMI et ODBC


Le driver ODBC disponible dans le rpertoire \ VALUEADD\MSFT\MGMT\WBEMODBC du CD de NT / XP, permet
par exemple MS-Access de se connecter sur un rfrentiel WMI local ou distant.

V-D - Contrles ActiveX additionnels


Le SDK WMI propose un ensemble de contrles ActiveX. Vous pouvez les utiliser pour fournir une interface graphique
(GUI) dans vos applications.
Commande
Class Navigator Control
CPP Wizard Control
EventList Control
EventRegEdit Control
HmmView Control
MOF Compiler Control
MOF Generator Wizard Control
Multiple Object Viewer Control
Namespace Entry Control
Navigator Control
RegEvent Control
Security Control
Single Object Viewer Control
WMI Object Viewer Control (previously
called WBEM Object Viewer Control)

Description
Affiche un tree view de la structure de classe
du rfrentiel d'objet CIMOM.
Gnre du code C++ pour les objets
indiqus.
Montre les vnements auxquels il est
inscrit.
Fournit une interface utilisateur simple pour
dfinir les filtres d'vnement WMI et les
clients et les lier entre eux.
Montre des vues faites sur commande des
objets.
Compile un fichier .MOF indiqu.
Produit d'un fichier .MOF pour les objets
indiqus.
Affiche les dtails dans un format de table
pour un ou plusieurs objets.
Permet des utilisateurs de visualiser et de
slectionner des espaces de nom.
Affiche les associations entre les objets dans
le rfrentiel de CIMOM.
Enregistre des filtres d'vnement.
Fournit des services de login pour les
contrles activeX de WMI.
Affiche les dtails pour un objet indiqu.
Fournit des dispositifs de navigation pour les
contrles Single Object Viewer and Multiple
Instance Viewer.

Outils additionnels d'administration de WMI

V-E - WbemDump
Wbemdump est un outil propos (logiquement) dans le SDK WMI, il est similaire l'outil WMIC mais ncessite un
peu plus de connaissance sur WMI. Il permet par exemple d'excuter des mthodes de classe.
Pour obtenir la liste des options disponible : WbemDump /?
WbemDump /E /Q Root\CimV2 WQL "Select * From meta_class"

Voir en Annexe

- 21 -

Copyright 2004 Laurent Dardenne. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents,
images, etc. sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu' trois ans de prison et jusqu' 300 000 de dommages et intrts.
http://laurent-dardenne.developpez.com/articles/wmi-p1/

Windows Management Instrumentation (WMI), premire partie. par Laurent Dardenne

V-F - WMIC
Le programme,WMIC disponible sous XP et 2003 uniquement, permet d'interroger WMI via la ligne de commande.
WMIC / ? donne la liste des commandes disponibles et des alias.
WMIC [Entre] permet d'entrer en mode interactif, ensuite la commande / ?:Full donne le dtail des commandes.
WMIC Service renvoie la liste et l'tat des services NT de la machine interroge, le commutateur /Node permet de
se connecter sur une machine distante.
Un alias est une instance de classe MSFT_CliAlias stock dans l'espace de nom Root\Cli du rfrentiel CIM. Il est
donc possible d'tendre les commandes de WMIC par la cration de nouvelles classes :
Dtail de la classe MSFT_CliAlias
Crer un alias pour WMIC
Sur la recopie d'cran suivante, on peut voir que la proprit Target contient la requte WQL Select * from
Win32_Service' permettant de retrouver toutes les informations lies aux services et que la proprit FriendlyName
contient le nom de l'alias Service.

La commande suivante permet de crer un fichier rsultat au format HTML :


'C:\WINDOWS\system32\wbem>WMIC
/Output:C:\TEMP\SERVICELIST.HTM
Translate:BASICXML /Format:HTABLE.XSL'.

SERVICE

LIST

Voir les fichiers C:\WINDOWS\system32\wbem\*.XSL pour connatre les diffrents formats.

- 22 -

Copyright 2004 Laurent Dardenne. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents,
images, etc. sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu' trois ans de prison et jusqu' 300 000 de dommages et intrts.
http://laurent-dardenne.developpez.com/articles/wmi-p1/

Windows Management Instrumentation (WMI), premire partie. par Laurent Dardenne

VI - Delphi
VI-A - Configurer la palette de composants Delphi 5
Dans le menu Projet slectionner Importer une bibliothque de type .
Cliquer sur Ajouter puis slectionner le fichier C:\WINDOWS\system32\wbem\wbemdisp.tlb, cette librairie de type
propose les objets de scripting WMI.
Puis sur Installer.
Vous trouverez 6 nouveaux composants dans l'onglet ActiveX :

TSWbemLocator
TSWbemNamedValueSet
TSWbemObjectPath
TSWbemLastError
TSWbemSink
TSWbemDateTime
TSWbemRefresher

Description : Microsoft WMI Scripting v1.1 Library (Version 1.1).


Une cinquantaine d'interfaces sont disponible dans l'unit WbemScripting_TLB
La librairie C:\WINDOWS\system32\wbem\wbemads.tlb propose quant elle les extensions WMI ADSI (Active
Directory Services Interface) permettant de grer les accs Active Directory. Elle propose un seul composant :
TWMIExtension
Description : WMI Extension to DS 1.0 Type Library (Version 1.0)

VI-B - Crer une application WMI


Vous devez initialiser un objet SwbemLocator.
Crer une connexion un espace de nom WMI.
Par dfinition, WMI est excut dans un processus diffrent de votre application. Vous devez donc cre une
connexion entre votre application et WMI.
Dfinir le niveau de scurit de la connexion WMI.
Implmenter les besoins de votre application.
WMI offre une varit d'interfaces COM qui vous permettent d'accder et de manipuler les donnes de votre
entreprise. C'est ici que votre application accde WMI.
Librer les ressources utilises et terminer votre application.
Aprs avoir excut vos requtes sur WMI, vous devez vous assurer de librer tous les objets COM allous
et terminer correctement votre application.

VII - Interface IEnumVARIANT


Cette interface propose de faciliter l'itration sur une collection de variants, par exemple pour grer une collection
de type SWbemObjectSet.
Clone
Cre une copie de l'tat courant de l'numration.
Next
Renvoie l'lment suivant dans l'ordre d'numration.
- 23 -

Copyright 2004 Laurent Dardenne. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents,
images, etc. sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu' trois ans de prison et jusqu' 300 000 de dommages et intrts.
http://laurent-dardenne.developpez.com/articles/wmi-p1/

Windows Management Instrumentation (WMI), premire partie. par Laurent Dardenne

Resets
Rinitialise l'ordre d'numration au premier lment.
Skip
Modifie l'ordre d'numration, saute les n prochains lments.
Pour le dtail des objets suivant voir le SDK.

VIII - Objet SWbemlocator


Vous pouvez utiliser les mthodes d'un objet SWbemLocator pour vous connecter
un espace de nom sur un ordinateur local ou distant.

VIII-A - ConnectServer
Cette mthode renvoie, en cas de succs, un objet de type SWbemServices qui reprsente une connexion un
espace de nom.
StrServer
Nom de machine si vous souhaitez vous connecter un espace de nom distant.
Peut tre soit '\\myserver\root\default' soit un nom DNS ou encore une adresse IP.
Pour un accs local prciser en utilisant le point '.'.
strNamespace
Nom de l'espace de nom sur lequel vous souhaitez vous connecter.
Exemple : 'root\default' (espace de nom par dfaut) ou 'root\CIMV2'
L'espace de nom par dfaut est configur dans la base de registre :
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\WBEM\Scripting\Default Namespace.
strUser
Nom du compte utilis pour se connecter.
Renseigner ce paramtre uniquement pour une connexion un serveur distant.
Si c'est un domaine diffrent utiliser le format 'Domain\\UserName' ou le format UPN
'UserName@DomainName'.
Ne pas renseigner ce paramtre si strAuthority est dj renseign.
strPassword
Une valeur NIL indique le contexte de scurit courant.
Renseigner ce paramtre uniquement pour une connexion un serveur distant.
strLocale
Indique le code de localisation (LCID), par exemple MS_409 pour l'Amricain.
strAuthority
Ce paramtre peut contenir le nom du domaine NT qui hberge le compte utilis pour s'authentifier.
- 24 -

Copyright 2004 Laurent Dardenne. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents,
images, etc. sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu' trois ans de prison et jusqu' 300 000 de dommages et intrts.
http://laurent-dardenne.developpez.com/articles/wmi-p1/

Windows Management Instrumentation (WMI), premire partie. par Laurent Dardenne

si le nom commence par Kerberos: , l'authentification Kerberos est utilise


si il commence par NTLMDOMAIN: , l'authentification NT LAN Manager est utilise
s'il est vide, l'authentification NT LAN Manager est utilise.
iSecurityFlags
Une valeur zro (0) ne termine l'appel de cette mthode qu'une fois la connexion au serveur tablie. Ceci
pourrait avoir comme consquence que votre programme attende indfiniment la connexion si le serveur ne
rpond pas.
Sinon utiliser le flag wbemConnectFlagUseMaxWait qui garanti un retour d'appel en 2 mn ou moins.
objWbemNamedValueSet
Typiquement ce paramtre est indfini (NIL).
Sinon pour une utilisation avance, voir SwbemNamedValue
NE PAS spcifier strUser, strPassword ou strAuthority lorsque vous tablissez une connexion
un espace de nom local.

VIII-B - Security
Les applications clientes utilisant des interfaces WMI peuvent spcifier le niveau de scurit de leurs processus en
utilisant cette proprit.
Elle contient un objet de type SWbemSecurity.
Une valeur NIL accorde un accs illimit.

IX - Objet SWbemSecurity
L'objet SwbemSecurity permet de lire ou modifier le niveau de scurit assign un objet, tels que les privilges,
la dlgation de COM, et les niveaux d'authentification.
Plus d'informations sur la scurit WMI

X - Objet SWbemServices
Les mthodes d'un objet SWbemServices permettent d'effectuer des oprations sur un espace de nom local ou
distant.
Toutes ses mthodes ne se terminant pas par Async peuvent tre appeles en mode synchrone et semi-synchrone
en renseignant le paramtre IFlags.
IFlag
Mode synchrone = wbemFlagReturnWhenComplete
Mode semi-synchrone = wbemFlagForwardOnly + wbemFlagReturnImmediately
Pour des raisons de scurit il est prfrable d'utiliser des appels synchrones ou semisynchrones.
Les appels asynchrones sont dconseills par Microsoft, moins que vous matrisiez
parfaitement ce que vous faites.

- 25 -

Copyright 2004 Laurent Dardenne. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents,
images, etc. sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu' trois ans de prison et jusqu' 300 000 de dommages et intrts.
http://laurent-dardenne.developpez.com/articles/wmi-p1/

Windows Management Instrumentation (WMI), premire partie. par Laurent Dardenne

X-A - GET
Recherche un objet, une dfinition de classe ou une instance, bas sur le chemin de l'objet. Cette mthode recherche
seulement des objets dans l'espace de nom li l'objet SwbemServices courant. Cette mthode est appele en
mode synchrone.
Cette mthode renvoie, en cas de succs, un objet de type SWbemObject qui reprsente l'objet demand.
strObjectPath
Contient le chemin d'objet de l'objet rechercher. S'il est vide, l'objet renvoy peut devenir une nouvelle
classe.
iFlags
Dtermine le comportement de la requte. Ce paramtre accepte la valeur suivante :
WbemFlagUseAmendedQualifiers.
WMI renvoie des donnes de classe amendment avec la dfinition de classe de base. Pour plus
d'informations sur le qualificateur amended, Exemple
objWbemNamedValueSet
Typiquement, n'est pas renseign (NIL). Autrement, c'est un objet de type SWbemNamedValueSet dont les
lments reprsentent l'information de contexte qui peut tre employe par le provider qui gre la demande.
Un provider qui permet l'utilisation ou requiert une telle information doit documenter les noms des valeurs reconnues,
des types de donnes de la valeur, les valeurs permises, et la smantique.

X-B - InstancesOf
Cre une collection d'objet qui renvoie les instances d'une classe indique selon les critres de slection de
l'utilisateur.
Cette mthode renvoie, en cas de succs, un objet de type SwbemObjectSet.
strClass
Contient le nom de la classe pour laquelle vous souhaitez retrouver les instances. Ce paramtre doit tre
renseign.
iFlags
Ce paramtre dtermine comment l'appel numre les classes dans la hirarchie et si cet appel
est mode asynchrone (retour immdiat) ou pas. La valeur par dfaut pour ce paramtre est
wbemFlagReturnImmediately.
Voir le SDK pour les valeurs permises et leurs significations.
objWbemNamedValueSet
Voir la dfinition de ce paramtre dans la mthode .Get de cet objet.

- 26 -

Copyright 2004 Laurent Dardenne. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents,
images, etc. sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu' trois ans de prison et jusqu' 300 000 de dommages et intrts.
http://laurent-dardenne.developpez.com/articles/wmi-p1/

Windows Management Instrumentation (WMI), premire partie. par Laurent Dardenne

X-C - ExecQuery
Excute une requte WQL permettant de rechercher des objets.
Cette mthode renvoie, en cas de succs, un objet de type swbemobjectset, contenant les objets recherchs.
Cette mthode est appele en mode semi-synchrone.
strQuery
Contient le texte de la requte WQL. Ce paramtre doit tre renseign.
strQueryLanguage
Contient le langage d'interrogation utiliser. S'il est spcifi sa valeur doit tre WQL .
iFlags
Voir le SDK pour les valeurs permises et leurs significations.
objWbemNamedValueSet
Voir la dfinition de ce paramtre dans la mthode .Get de cet objet.

XI - Objet SWbemObject
Vous pouvez utiliser les mthodes et les proprits d'un objet SWbemObject pour reprsenter une dfinition de
classe WMI ou une instance d'objet de n'importe quelle classe.
L'objet que vous manipulez est une copie locale, si vous souhaitez modifier l'objet dans le rfrentiel WMI, utilisez
la mthode put_ .
Si vous voulez crer une nouvelle classe utilisez SWbemServices.Get avec un nom de path vide. L'appel retourne
un objet SWbemObject qui peut devenir une classe.
Vous pouvez renseigner un nom de classe dans la proprit de l'objet SWbemObjectPath retourn par l'appel de
la mthode Path_
Vous pouvez ajouter des proprits la nouvelle classe par l'appel de la mthode Properties_.
Pour crer une instance d'une classe existante appeler SWbemServices.SpawnInstance_.

XII - Objet SWbemObjectSet


Propose une collection d'objet de type SWbemObject.
Vous pouvez obtenir un objet SwbemObjectSet en appelant une des mthodes suivantes ou leur quivalent
asynchrone :

SWbemObject.Associators_
SWbemObject.Instances_
SWbemObject.References_

- 27 -

Copyright 2004 Laurent Dardenne. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents,
images, etc. sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu' trois ans de prison et jusqu' 300 000 de dommages et intrts.
http://laurent-dardenne.developpez.com/articles/wmi-p1/

Windows Management Instrumentation (WMI), premire partie. par Laurent Dardenne

SWbemObject.Subclasses_
SWbemServices.AssociatorsOf
SWbemServices.ExecQuery
SWbemServices.InstancesOf
SWbemServices.ReferencesTo
SWbemServices.SubclassesOf

Puisque le call-back un collecteur de donnes (Sink) pourrait ne pas avoir le mme niveau d'authentification qu'exige
le client, il est recommand d'employer une communication semi-synchrone au lieu d'une communication asynchrone.

XIII - Objet SWbemXXXXXSet


Les objets se terminant par Set proposent des collections d'objets, leur type tant indiqu dans le nom de l'objet.
Par exemple l'objet SwbemPropertySet contient un collection d'objets de type SwbemProperty.
Objets de type collection (enumerators) :
SwbemPropertySet, SWbemNamedValueSet, SWbemPrivilegeSet, SWbemQualifierSet, SWbemMethodSet,

XIV - Objet SWbemProperty


Cet objet reprsente une proprit d'un objet gr.
CIMType
Type de la proprit.
IsArray
Indique si la proprit est un tableau.
IsLocal
Indique si c'est une proprit locale.
Une valeur False indique que la proprit est hrite d'une autre classe.
Name
Nom de la proprit.
Origin
Contient la classe d'origine de cette proprit. Recherche le nom de la classe de WMI dans laquelle cette
proprit a t dclare. Pour les classes avec des hirarchies d'hritage profond, il est souvent souhaitable
de connatre quelles proprits ont t dclares et dans quelle classe.
Si la proprit est locale (voir SWbemQualifier.IsLocal), cette valeur est identique la classe propritaire.
Qualifiers_
Objet de type SwbemQualiferSet, qui est une collection des qualificateurs de la proprit.
Value

- 28 -

Copyright 2004 Laurent Dardenne. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents,
images, etc. sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu' trois ans de prison et jusqu' 300 000 de dommages et intrts.
http://laurent-dardenne.developpez.com/articles/wmi-p1/

Windows Management Instrumentation (WMI), premire partie. par Laurent Dardenne

Valeur actuelle de la proprit. C'est la proprit d'automation par dfaut de cet objet (c'est un objet de type
variant)

XV - Objet SWbemObjectPath
Utilisez cet objet pour construire et valider un chemin d'objet.
La proprit Keys permet de rcuprer la ou les cls d'une classe ou d'une instance.

XVI - Objet SWbemDateTime


Utilisez cet objet pour analyser et renseigner des valeurs de type date du rfrentiel CIM.
Sous XP uniquement et Windows 2003

XVII - Objet ISWbemNamedValue


Reprsente une valeur simple nomme qui appartient une collection SWbemNamedValueSet.
Cet objet n'a pas de mthode.
Exemple d'utilisation :
Retrouver une instance 'partielle', ie. WMI renvoie seulement les proprits indiques dans l'objet
SWbemNamedValueSet. Voir les restrictions.
Dans le cas o un objet SWbemSink prend en charge de multiple requtes asynchrone, l'objet
SWbemNamedValueSet permet d'identifier,lors d'un vnement OnObjectReady, la requte concerne.
Voir le code source complet dans la seconde partie, Mise en uvre sous Delphi.
Procedure TForm1.BtExecuteClick(Sender: TObject);
//Dmarre la requte de polling et la collecte des vnements par SWbemSink1
var
Query: String;
Query2: String;
Value : Olevariant;
ProcessContext,
EventLogContext : TSWbemNamedValue;
begin
...
// Ajoute un objet TSWbemNamedValue afin d'identifier un vnement.
Value:='Instances';
ProcessContext:=InitContexte('SinkName',Value);
Value:='EventLog';
EventLogContext:=InitContexte('SinkName',Value);
// Surveille les fins de process
Query:='Select * from __InstanceDeletionEvent within 1 where TargetInstance isa "Win32_Process"';
// On utilise le mme Collecteur pour 2 vnements diffrent
WMIService.ExecNotificationQueryAsync(SWbemSink1.DefaultInterface,
Query,
'WQL',
wbemFlagSendStatus,
Nil,
ProcessContext.DefaultInterface);

- 29 -

Copyright 2004 Laurent Dardenne. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents,
images, etc. sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu' trois ans de prison et jusqu' 300 000 de dommages et intrts.
http://laurent-dardenne.developpez.com/articles/wmi-p1/

Windows Management Instrumentation (WMI), premire partie. par Laurent Dardenne

// Surveille l'ajout dans le journal d'vnement


Query2:='Select * from __InstanceCreationEvent where TargetInstance isa "Win32_NTLogEvent"';
WMIService.ExecNotificationQueryAsync(SWbemSink1.DefaultInterface,
Query2,
'WQL',
wbemFlagSendStatus,
Nil,
EventLogContext.DefaultInterface);
...
end;
Procedure TForm1.SWbemSink1ObjectReady(Sender: TObject; var objWbemObject,
objWbemAsyncContext: OleVariant);
// Dclench lorsqu'un objet fourni par l'appel asynchrone est disponible.
var WmiObjet: ISWbemObject;
WMIContext : TSWbemNamedValueSet;
Contexte : ISWbemNamedValue;
WMILastError: TSWbemLastError;
begin
Try
...
Contexte:= WMIContext.Item('SinkName',0);
If Contexte.Get_Value = 'Instances'
Then Memo1.Lines.Add('Le process '+WMIVariantToStr(WmiObjet.Properties_.Item('Name',0).Get_Value)+
' s''est termin.')
else
If Contexte.Get_Value = 'EventLog'
then Memo1.Lines.Add('Un vnement vient d''tre ajout au journal des vnements '+#13#10+
WMIVariantToStr(WmiObjet.Properties_.Item('Message',0).Get_Value))
....
end;

XVIII - Objet SWbemPrivilege


Reprsente un privilge de scurit.
Certaine oprations ncessite d'ajouter des privilges, si toutefois le compte utilisateur l'autorise. Cela ne permet pas
un utilisateur d'excuter des tches ncessitant les privilges administrateur.
Par exemple :

wbemPrivilegeShutdown, requis pour arrter une machine.


wbemPrivilegeDebug, requis pour dboguer un process.
wbemPrivilegeSecurity, requis pour accder au journal d'vnement (EventLog).

Cet objet n'a pas de mthode.


voir.

XIX - Objet SwbemQualifier


Vous pouvez utiliser les proprits de l'objet de SWbemQualifier pour reprsenter un qualificateur simple d'une classe
WMI, d'une instance, d'une proprit ou d'un paramtre de mthode.
Cet objet n'a pas de mthode.

- 30 -

Copyright 2004 Laurent Dardenne. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents,
images, etc. sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu' trois ans de prison et jusqu' 300 000 de dommages et intrts.
http://laurent-dardenne.developpez.com/articles/wmi-p1/

Windows Management Instrumentation (WMI), premire partie. par Laurent Dardenne

XX - Objet SWbemMethod
Vous pouvez utiliser les proprits de cet objet pour inspecter les dfinitions de mthode d'un objet WMI.
Pour appeler ces mthodes, vous devez employer soit l'accs direct sur un objet de type SWbemObject (c'est le
mcanisme recommand), soit par l'appel de SWbemServices.ExecMethod.
Note : Dans cette version de l'API, l'accs en criture l'information de mthode n'est pas support. Si vous voulez
dfinir des mthodes ou modifier des dfinitions de mthode existantes, vous pouvez dfinir les changements de
cette mthode dans un fichier .mof puis le compiler. Alternativement, vous pouvez employer les API COM de WMI.
Cet objet n'a pas de mthode.

XXI - Objet SWbemEventSource


L'objet SWbemEventSource retrouve
SWbemServices.ExecNotificationQuery.

des

vnements

d'une

requte

d'vnement

via

la

mthode

Vous obtenez un objet de SWbemEventSource si vous faites un appel la mthode


SWbemServices.ExecNotificationQuery pour excuter une requte d'vnement. Vous pouvez alors employer la
mthode NextEvent pour retrouver des vnements ds qu'ils arrivent.

XXII - Objet SWbemLastError


Les mthodes et les proprits de l'objet SWbemLastError contiennent et manipulent des objets d'erreur. Les
mthodes et les proprits de cet objet sont exactement identiques ceux de l'objet SWbemObject, mais sont
employes pour contenir l'information d'erreur au lieu de l'information de classe de WMI.
Vous pouvez crer un objet d'erreur SWbemLastError pour inspecter l'information tendue d'erreur lie un prcdent
appel de mthode. Si l'information d'erreur n'est pas disponible, une tentative de cration d'un objet d'erreur chouera.
Si l'appel russit et retourne un objet d'erreur, le statut de l'objet est remis zro. D'autres tentatives de cration d'un
objet d'erreur choueront jusqu' ce qu'une nouvelle erreur se produise.
Si vous faites un appel asynchrone qui choue, un objet SWbemLastError peut vous tre retourn par l'vnement
SWbemSink.OnCompleted dans le paramtre objWbemErrorObject.
La classe systme __ExtendedStatus est employe pour renvoyer les informations dtailles de statut et d'erreur.
class __ExtendedStatus : __NotifyStatus
{
string Description;
string Operation;
string ParameterInfo;
string ProviderName;
uint32 StatusCode;
};

Mthodes
Cette classe n'a aucune mthode.
Proprits
Elle possde les proprits suivantes qui sont toutes en Read-only :

- 31 -

Copyright 2004 Laurent Dardenne. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents,
images, etc. sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu' trois ans de prison et jusqu' 300 000 de dommages et intrts.
http://laurent-dardenne.developpez.com/articles/wmi-p1/

Windows Management Instrumentation (WMI), premire partie. par Laurent Dardenne

Description
Chane dfinie par l'utilisateur, dcrit une erreur ou un statut oprationnel.
Opration
Opration en cours au moment o a lieu l'erreur (chec ou anomalie).
Typiquement, WMI renseigne cette proprit avec le nom de l'API COM de la mthode WMI. Exemple :
IWbemServices::CreateInstanceEnum.
ParameterInfo
Paramtres impliqus dans l'erreur.
Par exemple, si une application essaie de rechercher une classe qui n'existe pas, cette proprit est
renseigne avec le nom de la classe fautive.
ProviderName
Identifie le provider qui provoque ou rapporte l'erreur. Si un provider n'est pas impliqu, cette proprit
contient Windows Management .
StatusCode
Contient un code d'erreur ou d'information pour une opration.
Ce peut tre n'importe quelle valeur dfinie par le provider, mais la valeur 0 (zro) est habituellement
rserve pour indiquer le succs.
Cette proprit est hrite de __ NotifyStatus.
Quand des instances de cette classe sont retournes d'une mthode par un provider
dynamique, les proprits StatusCode et Description sont renseignes par le provider, et les
autres proprits sont renseignes par WMI.
Sous Delphi les erreurs rencontres sont des exceptions de type EOleException.
Si l'information d'erreur n'est pas disponible, la cration d'un objet SwbemLastError provoquera une exception de
type EOleSysError.
Les erreurs dbutant par $8007xxxx sont des erreurs WIN32 et celles dbutant par $8004xxxx des erreurs de WMI.

XXII-A - Codes d'erreur


Codes d'erreur retourns par les appels WMI
Codes de statut retourns par les oprations WMI
Codes d'erreur retourns par les providers WMI

XXIII - Objet SwbemSink


L'objet SWbemSink (collecteur) est implment par des applications clientes pour recevoir les rsultats des
oprations asynchrones et des notifications d'vnement. Pour faire un appel asynchrone, vous devez crer une
instance d'un objet de SWbemSink et le passer une mthode l'utilisant sous le nom de paramtre ObjWbemSink.

- 32 -

Copyright 2004 Laurent Dardenne. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents,
images, etc. sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu' trois ans de prison et jusqu' 300 000 de dommages et intrts.
http://laurent-dardenne.developpez.com/articles/wmi-p1/

Windows Management Instrumentation (WMI), premire partie. par Laurent Dardenne

Les vnements dans votre implmentation de SWbemSink sont dclenchs quand le statut ou les rsultats sont
retourns ou que l'appel est termin.

XXIII-A - Cancel
Annule toutes les oprations asynchrones lies cet objet.
Remarques
Un call-back asynchrone permet un utilisateur non-authentifi de fournir des donnes au collecteur (sink). Ceci pose
des problmes de scurit pour vos scripts et applications. Pour liminer les risques, employez la communication
semi-synchrone ou synchrone.

XXIII-B - vnements
Vous pouvez implmenter des sous-programmes appeler quand des vnements sont dclenchs.
Par exemple, si vous voulez traiter chaque objet retourn par une requte asynchrone tel que
SWbemServices.ExecQueryAsync, crez un sous-programme en utilisant l'vnement OnObjectReady de l'objet
Sink qui est indiqu dans l'appel asynchrone.
procedure TForm1.CollecteurEvenementObjectReady(Sender: TObject;
const objWbemObject: ISWbemObject;
const objWbemAsyncContext: ISWbemNamedValueSet);
// Dclench lorsqu'un objet fourni par l'appel asynchrone est disponible.
// objWbemObject contient l'objet retourn
var WmiObjet: SWbemObject;
begin
WmiObjet:=IUnknown(objWbemObject) as SWbemObject;
//Affiche la dfiniton de classe au format MOF
Memo1.Lines.Add(AdjustLineBreaks(WmiObjet.GetObjectText_(0)));
end;

Utilisez la table suivante comme rfrence pour identifier des vnements et des descriptions de Trigger.
Description d'vnement :

OnCompleted est dclench quand une opration asynchrone est termine.


OnObjectPut est dclench aprs une opration PUT asynchrone.
OnObjectReady est dclench quand un objet, fourni par un appel asynchrone, est disponible.
OnProgress est dclench pour fournir le statut d'une opration asynchrone.

Si les vnements sont produits partir d'un provider qui implmente les mises jour de statut, vous pouvez grer
l'vnement OnProgress pour informer les utilisateurs propos d'un changement de statut lors d'une opration
asynchrone.

XXIV - Objet SWbemServicesEx


tend les fonctionnalits de l'objet SwbemServices.
Sous XP uniquement et Windows 2003

- 33 -

Copyright 2004 Laurent Dardenne. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents,
images, etc. sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu' trois ans de prison et jusqu' 300 000 de dommages et intrts.
http://laurent-dardenne.developpez.com/articles/wmi-p1/

Windows Management Instrumentation (WMI), premire partie. par Laurent Dardenne

XXV - Objet SWbemObjectEx


tend les fonctionnalits de l'objet SWbemObject.
Propose, entre autre, la mthode GetText_ qui permet d'extraire la reprsentation XML d'une classe.
Sous XP uniquement et Windows 2003

XXVI - Objet SWbemRefresher


L'objet SWbemRefresher est un conteneur d'objet qui peut rafrachir les donnes des objets qu'il contient. Des
instances simples et des collections d'instances peuvent tre ajoutes ou enleves du conteneur.
Dans l'ensemble des objets ajouts, chaque lment reprsent par une instance de SWbemRefreshableItem peut
tre trait comme une collection et tre numr. Des instances WMI de n'importe quelle classe peuvent tre ajoutes
l'objet SWbemRefresher.
Mme si le provider pour les donnes d'instance n'est pas un provider de 'haute performance', l'objet refresher'
peut encore mettre jour les donnes par l'appel de la mthode Refresh. Si les donnes sont fournies par un provider
de haute performance' et si la proprit AutoReconnect est True, alors l'objet SWbemRefresher essaye de rtablir
une connexion rompue avec le provider de donnes.
L'opration de refresh peut
SWbemObjectEx.Refresh _.

tre

effectue

en

appelant

la

mthode

SWbemRefresher.Refresh

ou

Sous XP uniquement et Windows 2003

XXVII - Objet SWbemRefreshableItem


L'objet SWbemRefreshableItem reprsente un simple lment d'un objet SWbemRefresher.
Un objet SWbemRefreshableItem est obtenu par l'appel des mthodes .Add et .AddEnum de l'objet
SWbemRefresher.
Sous XP uniquement et Windows 2003

XXVIII - Annexe
Alain Lissoir's home page
Propose les scripts des ouvrages cits plus bas. Contient notamment une version compil de l'outil WbemDump.exe.
http://www.openpegasus.org/
Tutorial (C ,linux)
http://www.wbemsource.org/
Provider WMI tiers. Gestion des fichiers : ASCIFSEP

- 34 -

Copyright 2004 Laurent Dardenne. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents,
images, etc. sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu' trois ans de prison et jusqu' 300 000 de dommages et intrts.
http://laurent-dardenne.developpez.com/articles/wmi-p1/

Windows Management Instrumentation (WMI), premire partie. par Laurent Dardenne

XXVIII-A - Exemple
Exemple de tches WMI
Exemple de provider ligne de commande
Exemple de provider pour l'Event Log NT
Exemples de script VBScript
De nombreux exemples de script WMI, classs par type de tche

XXVIII-B - Rfrences d'ouvrage


Understanding WMI Scripting Editeur(s) : Digital Press
Auteur(s) : A.Lissoir
Nb de pages : 622 pages
Langue : Anglais
ISBN : 1-55558-266-4
Leveraging WMI Scripting - Operating Systems Editeur(s) : Digital Press
Auteur(s) : A.Lissoir
Nb de pages : 918 pages
Langue : Anglais
ISBN : 1-55558-299-0
Windows Management Instrumentation - WMI Editeur(s) : New Riders
Auteur(s) : M.Lavy A.Meggitt
Nb de pages : 408 pages
Langue : Anglais
ISBN : 1-57870-260-7

XXIX - WMI, seconde partie


Mise en uvre sous Delphi.

- 35 -

Copyright 2004 Laurent Dardenne. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents,
images, etc. sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu' trois ans de prison et jusqu' 300 000 de dommages et intrts.
http://laurent-dardenne.developpez.com/articles/wmi-p1/