Partilhar via


Como implementar assinaturas de evento permanentes entre namespaces

É recomendável que todas as assinaturas permanentes sejam compiladas no namespace \root\subscription. Isso evita a necessidade de compilar o consumidor permanente em cada namespace que está sendo usado, o que significa que há apenas um namespace para procurar assinaturas permanentes. Use a propriedade EventNamespace de __EventFilter para implementar uma assinatura de namespace cruzado.

Ao usar CommandLineEventConsumer, é importante proteger o executável que você está iniciando. Se o executável não estiver em um local seguro ou protegido por uma ACL (lista de controle de acesso) forte, qualquer pessoa poderá substituir o seu executável pelo próprio executável. Para obter mais informações sobre ACLs, consulte Criar um descritor de segurança para um novo objeto em C++.

O exemplo de código MOF (Managed Object Format) a seguir mostra uma assinatura de namespace cruzado.

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