Примечание
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Фильтр событий — это класс WMI, описывающий, какие события WMI доставляются физическому потребителю. Например, фильтр событий может указать WMI доставлять потребителю все события управления питанием или все события перезагрузки системы. Фильтр событий также описывает условия, в которых WMI предоставляет события. Фильтр событий может указать внутреннее или экстринсическое событие, и фильтр может ссылаться на события, происходящие в пространстве имен, отличном от пространства имен фильтра. Постоянный клиент должен иметь одинаковые CreatorSID в экземплярах клиента, фильтра и привязки. Для получения дополнительной информации см. раздел Безопасное получение событий.
В следующей процедуре описывается создание фильтра событий.
Создание фильтра событий
Создайте экземпляр системного класса WMI __EventFilter.
Создайте уникальный идентификатор для вашего фильтра, используя свойство Name, одним из двух следующих способов:
Используйте частную схему.
Произвольное именование фильтров событий работает до тех пор, пока вы не конфликтуете с другими схемами именования фильтров. Необходимо избежать конфликтов именования, так как добавление экземпляра с повторяющимся именем значением заменяет старый экземпляр.
Используйте глобальный уникальный идентификатор (GUID).
Если вы оставляете Name пустым, WMI заполняет Name GUID.
Опишите тип события, который требуется отфильтровать с помощью свойства запроса.
Свойство запроса содержит запрос WMI Query Language (WQL), описывающий тип события, которое требуется отфильтровать. Вы можете добиться точной фильтрации с помощью различных операторов и расширений для WQL.
Событие журнала NT создается при сбое выполнения запроса от постоянного потребителя событий. Источник события — WinMgmt, идентификатор события — 10, а тип события — Error.
WMI эффективнее при обработке строгих, конкретных запросов, чем широкие запросы. Создав конкретный запрос, можно избежать ненужных межпроцессных коммуникаций и сетевого трафика. В случаях событий, генерируемых поставщиком, WMI выполняет фильтрацию непосредственно у поставщика; это гарантирует, что только события, соответствующие фильтру, создают затраты на взаимодействие между процессами. Для получения дополнительной информации см. Запросы WMI.
Задайте свойству QueryLanguage тип языка запросов, используемого в свойстве запроса.
Вы почти всегда устанавливаете значение параметра QueryLanguage на WQL.
В следующем примере кода описывается фильтр событий, который сигнализирует о событии каждый раз, когда WMI создает экземпляр класса __TimerEvent в пространстве имен root\cimv2.
instance of __EventFilter as $FILTER
{
Name = "MyFilterName";
Query = "select * from __TimerEvent where TimerID=\"MyTimer\"";
QueryLanguage = "WQL";
EventNamespace = "\root\cimv2";
// this is the Administrators SID in array of bytes format
CreatorSID = {1,2,0,0,0,0,0,5,32,0,0,0,32,2,0,0};
};
Свойство EventNamespace указывает пространство имен, из которого происходят события. Вам не нужно создавать экземпляр фильтров в пространстве имен, где происходят события. Если пространство имен не указано, WMI создает фильтр в пространстве имен по умолчанию. Встроенные классы событий, такие как __InstanceOperationEvent, доступны в каждом пространстве имен.
Чтобы зарегистрировать логического потребителя для уведомлений о событиях, необходимо привязать фильтры событий к логическому потребителю. Дополнительные сведения см. в разделе Привязка фильтра событий с логическим потребителем.