Поделиться через


Реализация постоянных подписок на события между пространствами имен

Рекомендуется компилировать все постоянные подписки в пространство имен \root\subscription. Это предотвращает необходимость компиляции постоянного потребителя в каждое используемое пространство имен. Это означает, что существует только одно пространство имен для поиска постоянных подписок. Используйте свойство EventNamespace__EventFilter для реализации подписки между пространствами имен.

При использовании CommandLineEventConsumer важно защитить запускаемый исполняемый файл. Если исполняемый файл не находится в безопасном расположении или защищен с помощью строгого списка управления доступом (ACL), любой пользователь может заменить исполняемый файл своим собственным. Дополнительные сведения о списках управления доступом см. в разделе Создание дескриптора безопасности для нового объекта в C++.

В следующем примере кода формата управляемых объектов (MOF) показана подписка между пространствами имен.

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