Condividi tramite


Implementazione di sottoscrizioni di eventi permanenti tra spazi dei nomi

È consigliabile compilare tutte le sottoscrizioni permanenti nello spazio dei nomi \root\subscription. Ciò impedisce la necessità di compilare il consumer permanente in ogni spazio dei nomi usato, il che significa che esiste solo uno spazio dei nomi per cercare sottoscrizioni permanenti. Utilizzare la proprietà EventNamespace di __EventFilter per implementare una sottoscrizione tra spazi dei nomi.

Quando si usa CommandLineEventConsumer, è importante proteggere l'eseguibile che si sta avviando. Se il file eseguibile non si trova in una posizione sicura o protetto con un elenco di controllo di accesso sicuro (ACL), chiunque può sostituire il file eseguibile con uno dei propri. Per altre informazioni sugli elenchi di controllo di accesso, vedere Creazione di un descrittore di sicurezza per un nuovo oggetto in C++.

Nell'esempio di codice MOF (Managed Object Format) seguente viene illustrata una sottoscrizione tra spazi dei nomi.

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