Partilhar via


Implementando assinaturas de eventos 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 do __EventFilter para implementar uma assinatura entre namespaces.

Ao usar o CommandLineEventConsumer , é importante proteger o executável que você está iniciando. Se o executável não estiver em um local seguro ou protegido com uma lista de controle de acesso (ACL) forte, qualquer pessoa poderá substituir seu executável por um dos seus. Para obter mais informações sobre ACLs, consulte Criando 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 entre namespaces.

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