Implementazione di sottoscrizioni di eventi permanenti tra spazi dei nomi
È consigliabile compilare tutte le sottoscrizioni permanenti nello spazio dei nomi oot\subscription \r. In questo modo si evita di dover includere il consumer permanente in ogni namespace utilizzato, ossia che è presente un solo namespace per le sottoscrizioni permanenti. Utilizzare la proprietà EventNamespace di __EventFilter per implementare una sottoscrizione trasversale agli spazi dei nomi.
Quando si usa l'CommandLineEventConsumer, è importante proteggere l'eseguibile che si avvia. Se l'eseguibile non si trova in una posizione sicura o protetto da un elenco di controllo degli accessi solido (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 cross-namespace.
#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;
};