Implementieren namespaceübergreifender permanenter Ereignisabonnements

Es wird empfohlen, alle permanenten Abonnements in den Namespace \root\subscription zu kompilieren. Dadurch wird verhindert, dass der permanente Consumer in jeden verwendeten Namespace kompiliert werden muss, was bedeutet, dass es nur einen Namespace gibt, in dem nach permanenten Abonnements gesucht werden muss. Verwenden Sie die EventNamespace-Eigenschaft von __EventFilter, um ein namespaceübergreifendes Abonnement zu implementieren.

Bei Verwendung von CommandLineEventConsumer ist es wichtig, die ausführbare Datei zu schützen, die Sie starten. Wenn sich die ausführbare Datei nicht an einem sicheren Speicherort befindet oder nicht mit einer starken Zugriffssteuerungsliste (Access Control List, ACL) geschützt ist, kann jeder Ihre ausführbare Datei durch eine eigene ersetzen. Weitere Informationen zu ACLs finden Sie unter Erstellen einer Sicherheitsbeschreibung für ein neues Objekt in C++.

Das folgende MOF-Codebeispiel (Managed Object Format) zeigt ein namespaceübergreifendes Abonnement.

#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;
};