SWbemServices.ExecNotificationQuery 메서드

SWbemServices 개체의 ExecNotificationQuery 메서드는 이벤트를 수신하는 쿼리를 실행합니다. 호출이 즉시 반환됩니다. 사용자는 이벤트가 도착하면 이벤트의 반환된 열거자를 폴링할 수 있습니다.

이 메서드는 반동기 모드에서 호출됩니다. 자세한 내용은 메서드 호출을 참조하세요.

이 구문에 대한 설명은 스크립팅 API의 문서 규칙을 참조하세요.

구문

objwbemEventsource = .ExecNotificationQuery( _
  ByVal strQuery, _
  [ ByVal strQueryLanguage ], _
  [ ByVal iFlags ], _
  [ ByVal objWbemNamedValueSet ] _
)

매개 변수

strQuery

필수 요소. 이벤트 관련 쿼리의 텍스트를 포함하는 문자열입니다. 이 매개 변수는 공백일 수 없습니다. WMI 쿼리 문자열을 빌드하는 방법에 대한 자세한 내용은 WQL을 사용하여 쿼리WQL 참조를 참조하세요.

strQueryLanguage [optional]

사용할 쿼리 언어를 포함하는 문자열입니다. 지정된 경우 이 값은 "WQL"이어야 합니다.

iFlags [optional]

쿼리의 동작을 결정하는 정수입니다. 기본값은 wbemFlagReturnImmediately + wbemFlagForwardOnly입니다. 이 매개 변수를 지정하는 경우 이 매개 변수는 wbemFlagReturnImmediatelywbemFlagForwardOnly 모두로 설정해야 합니다. 그렇지 않으면 호출이 실패합니다. 이 매개 변수는 다음 값을 허용할 수 있습니다.

wbemFlagForwardOnly(32(0x20))

정방향 전용 열거자가 반환되도록 합니다. 정방향 전용 열거자는 일반적으로 기존 열거자보다 훨씬 빠르고 메모리를 덜 사용하지만 SWbemObject.Clone_에 대한 호출을 허용하지 않습니다.

wbemFlagReturnImmediately (16 (0x10))

호출이 즉시 반환되도록 합니다.

objWbemNamedValueSet [optional]

일반적으로 이는 정의되지 않습니다. 그렇지 않으면 요청을 서비스하는 공급자가 사용할 수 있는 컨텍스트 정보를 나타내는 요소가 있는 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) 또는 외래 이벤트 개체(예: RegistryKeyChangeEvent 또는 SNMP 이벤트와 같은 레지스트리 공급자 이벤트)일 수 있습니다. 자세한 내용은 수신할 이벤트 유형 결정이벤트 알림 받기를 참조하세요.

WQL 쿼리에 사용할 수 있는 ANDOR 키워드의 수에는 제한이 있습니다. 복잡한 쿼리에 사용되는 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
헤더
Wbemdisp.h
유형 라이브러리
Wbemdisp.tlb
DLL
Wbemdisp.dll
CLSID
CLSID_SWbemServices
IID
IID_ISWbemServices

추가 정보

SWbemServices

SWbemEventSource.NextEvent

SWbemServices.ExecQuery

WMI 이벤트 수신

WQL을 사용하여 쿼리

WQL(WMI의 경우 SQL)

수신할 이벤트 유형 결정