实现跨命名空间永久事件订阅
建议将所有永久订阅编译到 \root\subscription 命名空间中。 这样就不需要将永久所有者编译到每个正在使用的命名空间中,这意味着只有一个命名空间可以查找永久订阅。 使用 __EventFilter 的 EventNamespace 属性实现跨命名空间订阅。
使用 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;
};