Implémentation des abonnements aux événements permanents entre espaces de noms
Il est recommandé de compiler tous les abonnements permanents dans l’espace de noms \root\subscription. Cela évite d’avoir à compiler le consommateur permanent dans chaque espace de noms utilisé, ce qui signifie qu’il n’y aura qu’un seul espace de noms à rechercher pour les abonnements permanents. Utilisez la propriété EventNamespace de __EventFilter pour implémenter un abonnement inter-espaces de noms.
Lorsque vous utilisez CommandLineEventConsumer, il est important de sécuriser l’exécutable que vous lancez. Si l’exécutable n’est pas dans un emplacement sécurisé, ou qu’il n’est pas sécurisé avec une liste de contrôles d’accès (ACL) forte, n’importe qui peut remplacer votre exécutable par un autre. Pour plus d’informations sur les listes de contrôle d’accès, consultez Création d’un descripteur de sécurité (SD) pour un nouvel objet en C++.
L’exemple de code MOF (Managed Object Format) suivant montre un abonnement entre espaces de noms.
#pragma namespace("\\root\\subscription")
instance of __EventFilter as $FLT
{
Name = "Filter";
Query = "SELECT * FROM __InstanceModificationEvent "
"WHERE TargetInstance ISA \"Win32_LocalTime\" "
"AND TargetInstance.Hour = 8 "
"AND TargetInstance.Minute = 0 "
"AND TargetInstance.Second = 0 "
"AND TargetInstance.DayOfWeek = 6";
QueryLanguage = "WQL";
EventNamespace = "root\\cimv2";
};
instance of CommandLineEventConsumer as $CONS
{
ExecutablePath = "cmd.exe";
ShowWindowCommand = 7;
RunInteractively = true;
};
instance of __FilterToConsumerBinding
{
Consumer = $CONS;
Filter = $FLT;
};