Метод SWbemServices.ExecNotificationQuery
Метод ExecNotificationQuery объекта SWbemServices выполняет запрос для получения событий. Вызов возвращается немедленно. Пользователь может опрашив возвращаемый перечислитель на наличие событий по мере их поступления.
Метод вызывается в полусинхронном режиме. Дополнительные сведения см. в разделе Вызов метода .
Описание этого синтаксиса см. в разделе Соглашения о документах для API сценариев.
Синтаксис
objwbemEventsource = .ExecNotificationQuery( _
ByVal strQuery, _
[ ByVal strQueryLanguage ], _
[ ByVal iFlags ], _
[ ByVal objWbemNamedValueSet ] _
)
Параметры
-
strQuery
-
Обязательный. Строка, содержащая текст запроса, связанного с событиями. Этот параметр не может быть пустым. Дополнительные сведения о создании строк запросов WMI см. в разделах Запросы с помощью WQL и Справочник по WQL .
-
strQueryLanguage [необязательно]
-
Строка, содержащая используемый язык запросов. Если он указан, это значение должно быть WQL.
-
iFlags [необязательно]
-
Это целое число, определяющее поведение запроса. Значение по умолчанию — wbemFlagReturnImmediately + wbemFlagForwardOnly. Если вы укажете этот параметр, для этого параметра необходимо задать как wbemFlagReturnImmediately , так и wbemFlagForwardOnly , иначе вызов завершается ошибкой. Этот параметр может принимать следующие значения.
-
wbemFlagForwardOnly (32 (0x20))
-
Возвращает перечислитель только для прямого доступа. Перечислители только вперед обычно выполняются гораздо быстрее и используют меньше памяти, чем обычные перечислители, но не разрешают вызовы SWbemObject.Clone_.
-
wbemFlagReturnImmediately (16 (0x10))
-
Вызывает немедленный возврат вызова.
objWbemNamedValueSet [необязательно]
Как правило, это не определено. В противном случае это объект SWbemNamedValueSet , элементы которого представляют сведения контекста, которые могут использоваться поставщиком, обслуживающим запрос. Поставщик, поддерживающий или требующий таких сведений, должен документировать имена распознаваемых значений, тип данных значения, допустимые значения и семантику.
Возвращаемое значение
Если ошибки не возникает, этот метод возвращает объект SWbemEventSource . Вы можете вызвать метод SWbemEventSource.NextEvent для получения событий по мере их поступления.
Коды ошибок
После завершения метода ExecNotificationQuery объект Err может содержать один из кодов ошибок в следующем списке.
-
wbemErrAccessDenied — 2147749891 (0x80041003)
-
Текущий пользователь не имеет прав на просмотр результирующих наборов.
-
wbemErrFailed — 2147749889 (0x80041001)
-
Незаданная ошибка.
-
wbemErrInvalidParameter — 2147749896 (0x80041008)
-
Указан недопустимый параметр.
-
wbemErrInvalidQuery — 2147749911 (0x80041017)
-
Недопустимый синтаксис запроса.
-
wbemErrInvalidQueryType — 2147749912 (0x80041018)
-
Запрошенный язык запросов не поддерживается.
-
wbemErrOutOfMemory — 2147749894 (0x80041006)
-
Недостаточно памяти для завершения операции.
Комментарии
В отличие от метода SWbemServices.ExecQueryAsync , ExecNotificationQuery возвращает объекты типа событий, созданные будущими событиями, а не существующими объектами. Объекты событий, запрашиваемые ExecNotificationQuery , могут быть встроенными (например , __InstanceCreationEvent) или extrinsic (например, событиями поставщика реестра, такими как RegistryKeyChangeEvent или события SNMP). Дополнительные сведения см. в разделе Определение типа событий для получения и получения уведомлений о событиях.
Существуют ограничения на количество ключевых слов AND и OR , которые можно использовать в WQL-запросах. Большое количество ключевых слов WQL, используемых в сложном запросе, может привести к возврату WMI кода ошибки WBEM_E_QUOTA_VIOLATION в качестве значения HRESULT . Ограничение ключевых слов WQL зависит от сложности запроса.
Примеры
В следующем примере кода VBScript отслеживается изменение томов на локальном компьютере. Обратите внимание, что Win32_VolumeChangeEvent является событием, которое определяется поставщиком, а не внутренним событием, определяемым WMI. Дополнительные сведения см. в разделе Определение типа события для получения.
Set colMonitoredEvents = _
GetObject("Winmgmts:").ExecNotificationQuery_
("Select * from Win32_VolumeChangeEvent")
Do While i = 0
Set strLatestEvent = colMonitoredEvents.NextEvent
Wscript.Echo strLatestEvent.DriveName & "Time Created = " _
& strLatestEvent.Time_Created
Select Case strLatestEvent.EventType
Case 1
WScript.Echo "EventType = Configuration Changed"
Case 2
WScript.Echo "EventType = Device Arrival"
Case 3
WScript.Echo "EventType = Device Removal"
Case 4
WScript.Echo "EventType = Docking"
Case Else
WScript.Echo "Unrecognized EventType"
End Select
Loop
В следующем примере кода VBScript выполняется мониторинг удаления процесса. Если удалить процесс в диспетчере задач или закрыть приложение, скрипт отобразит сообщение. Обратите внимание, что этот скрипт запрашивает встроенное событие, определенное WMI — __InstanceDeletionEvent.
Set objWMIService = GetObject( _
"Winmgmts:{impersonationLevel=impersonate}" )
Set colMonitoredProcesses = _
objWMIService.ExecNotificationQuery( _
"SELECT * FROM __InstanceDeletionEvent WITHIN 10 WHERE " _
& "TargetInstance ISA 'Win32_Process'")
i = 0
Do While i < 11
Set strLatestProcess = colMonitoredProcesses.NextEvent
WScript.Echo strLatestProcess.TargetInstance.Name
WScript.Sleep 10000
i= i + 1
Loop
Требования
Требование | Значение |
---|---|
Минимальная версия клиента |
Windows Vista |
Минимальная версия сервера |
Windows Server 2008 |
Заголовок |
|
Библиотека типов |
|
DLL |
|
CLSID |
CLSID_SWbemServices |
IID |
IID_ISWbemServices |