实现跨命名空间永久事件订阅

建议将所有永久订阅编译为 \root\subscription 命名空间。 这可以防止需要将永久使用者编译到正在使用的每个命名空间中,这意味着只有一个命名空间需要查找永久订阅。 使用__EventFilterEventNamespace 属性实现跨命名空间订阅。

使用 CommandLineEventConsumer 时,请务必保护要启动的可执行文件。 如果可执行文件不在安全位置,或者使用强访问控制列表进行保护 (ACL) ,任何人都可以将可执行文件替换为自己的可执行文件之一。 有关 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;
};