SWbemServices.ExecNotificationQueryAsync 메서드

SWbemServices 개체의 ExecNotificationQueryAsync 메서드는 이벤트를 수신하는 쿼리를 실행합니다. 이 호출이 즉시 반환되고 결과와 상태는 objWbemSink에 지정된 싱크에 전달된 이벤트를 통해 호출자에게 반환됩니다.

쿼리에 지정된 이벤트는 내장 WMI(Windows Management Instrumentation) 이벤트(예: __InstanceCreationEvent) 또는 외래 이벤트(예: Win32_IP4RouteTableEvent 또는 RegistryKeyChangeEvent)일 수 있습니다. 자세한 내용은 수신할 이벤트 유형 결정을 참조하세요.

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

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

구문

SWbemServices.ExecNotificationQueryAsync( _
  ByVal objWbemSink, _
  ByVal strQuery, _
  [ ByVal strQueryLanguage ], _
  [ ByVal iFlags ], _
  [ ByVal objwbemNamedValueSet ], _
  [ ByVal objWbemAsyncContext ] _
)

매개 변수

objWbemSink

필수 요소. 이벤트 알림을 비동기적으로 수신하는 개체 싱크입니다. 개체를 수신할 SWbemSink 개체를 만듭니다.

strQuery

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

strQueryLanguage [optional]

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

iFlags [optional]

쿼리의 동작을 결정하는 정수입니다. 이 매개 변수는 다음 값으로 설정할 수 있습니다.

wbemFlagSendStatus (128 (0x80))

비동기 호출이 개체 싱크에 대한 OnProgress 이벤트 처리기로 상태 업데이트를 보내도록 합니다.

wbemFlagDontSendStatus (0 (0x0))

비동기 호출이 개체 싱크에 대한 OnProgress 이벤트 처리기로 상태 업데이트를 보내지 않도록 방지합니다.

objwbemNamedValueSet [optional]

일반적으로 이는 정의되지 않습니다. 그렇지 않으면 요청을 서비스하는 공급자가 사용할 수 있는 컨텍스트 정보를 나타내는 요소가 있는 SWbemNamedValueSet 개체입니다. 그러한 정보를 지원하거나 요구하는 공급자는 인식된 값 이름, 값의 데이터 형식, 허용된 값 및 의미 체계를 문서화해야 합니다.

objWbemAsyncContext [optional]

원래 비동기 호출의 원본을 식별하기 위해 개체 싱크로 반환되는 SWbemNamedValueSet 개체입니다. 동일한 개체 싱크를 사용하여 여러 비동기 호출을 수행하려면 이 매개 변수를 사용합니다. 이 매개 변수를 사용하려면 SWbemNamedValueSet 개체를 만들고 SWbemNamedValueSet.Add 메서드를 사용하여 수행 중인 비동기 호출을 식별하는 값을 추가합니다. SWbemNamedValueSet 개체는 개체 싱크로 반환되며 SWbemNamedValueSet.Item 메서드를 사용하여 호출 소스를 추출할 수 있습니다. 자세한 내용은 메서드 호출을 참조하세요.

반환 값

이 메서드는 값을 반환하지 않습니다. 성공하면 싱크는 인스턴스당 OnObjectReady 이벤트를 수신합니다. 마지막 인스턴스 이후 개체 싱크는 OnCompleted 이벤트를 수신합니다.

오류 코드

ExecNotificationQueryAsync 메서드가 완료되면 Err 개체에 다음 목록에서 식별된 오류 코드 중 하나가 포함될 수 있습니다.

wbemErrAccessDenied - 2147749891 (0x80041003)

현재 사용자는 결과 집합을 볼 권한이 없습니다.

wbemErrFailed - 2147749889 (0x80041001)

알 수 없는 오류입니다.

wbemErrInvalidParameter - 2147749896 (0x80041008)

잘못된 매개 변수가 지정되었습니다.

wbemErrInvalidQuery - 2147749911 (0x80041017)

쿼리 구문이 잘못되었습니다.

wbemErrInvalidQueryType - 2147749912(0x80041018)

요청된 쿼리 언어는 지원되지 않습니다.

wbemErrOutOfMemory - 2147749894(0x80041006)

메모리가 부족하여 작업을 완료할 수 없습니다.

설명

ExecNotificationQueryAsync 메서드는 이후 이벤트가 생성하는 이벤트 유형 개체를 반환합니다. ExecNotificationQueryAsync가 요청하는 이벤트 개체는 내장 이벤트 개체(예: __InstanceCreationEvent) 또는 외래 이벤트 개체(예: RegistryKeyChangeEvent 또는 SNMP 이벤트)일 수 있습니다. 자세한 내용은 수신할 이벤트 유형 결정을 참조하세요.

ExecNotificationQueryAsync에 대한 호출이 즉시 반환됩니다. 요청된 개체 및 상태는 objWbemSink에 지정된 싱크에 전달된 콜백을 통해 호출자에게 반환됩니다. 반환할 때 각 개체를 처리하려면 objWbemSink.OnObjectReady 이벤트 서브루틴을 만듭니다. 모든 개체가 반환된 후 최종 처리를 수행하여 objWbemSink.OnCompleted 이벤트를 구현합니다.

비동기 콜백을 사용하면 인증되지 않은 사용자가 싱크에 데이터를 제공할 수 있습니다. 이로 인해 스크립트 및 애플리케이션에 보안 위험이 발생할 수 있습니다. 위험을 제거하려면 비동기 호출에서 보안 설정을 참조하세요.

WQL 쿼리에 사용할 수 있는 ANDOR 키워드의 수에는 제한이 있습니다. 복잡한 쿼리에 사용되는 WQL 키워드가 많으면 WMI가 WBEM_E_QUOTA_VIOLATION 오류 코드를 HRESULT 값으로 반환할 수 있습니다. WQL 키워드의 제한은 쿼리가 얼마나 복잡한지에 따라 달라집니다.

예제

다음 VBScript 코드 예제에서는 프로세스가 종료되었음을 나타내는 WMI 이벤트 알림을 기다리는 스크립트를 보여 줍니다. 이벤트 클래스 __InstanceDeletionEvent의 인스턴스인 WMI 내장 이벤트를 기다리고 있습니다. __InstanceDeletionEventWin32_Process 인스턴스의 삭제를 나타내야 합니다. WMI 내장 이벤트에 대한 자세한 내용은 수신할 이벤트 유형 결정을 참조하세요.

다음 스크립트는 컴퓨터가 다시 부팅되거나, WMI가 중지되거나, 스크립트가 중지될 때까지 무기한 실행됩니다. 스크립트를 수동으로 중지하려면 작업 관리자를 사용하여 프로세스를 중지합니다. 프로그래밍 방식으로 중지하려면 Win32_Process 클래스에서 Terminate 메서드를 사용합니다.

strComputer = "." 
Set objWMIService = GetObject("winmgmts:\\" & _strComputer & "\root\CIMV2") 
Set MySink = WScript.CreateObject("WbemScripting.SWbemSink","SINK_")

objWMIservice.ExecNotificationQueryAsync MySink, "SELECT * FROM __InstanceCreationEvent WITHIN 1 " _
                                               & "WHERE TargetInstance ISA 'Win32_Process'"

WScript.Echo "Waiting for events..."

While (True)
    Wscript.Sleep(1000)
Wend

Sub SINK_OnObjectReady(objObject, objAsyncContext)
    WScript.Echo "Event occurred."
End Sub

Sub SINK_OnCompleted(objObject, objAsyncContext)
    WScript.Echo "Event call complete."
End Sub

요구 사항

요구 사항
지원되는 최소 클라이언트
Windows Vista
지원되는 최소 서버
Windows Server 2008
헤더
Wbemdisp.h
유형 라이브러리
Wbemdisp.tlb
DLL
Wbemdisp.dll
CLSID
CLSID_SWbemServices
IID
IID_ISWbemServices

추가 정보

SWbemServices

SWbemServices.ExecQuery

SWbemServices.ExecQueryAsync

시스템 레지스트리 이벤트 등록

수신할 이벤트 유형 결정

메서드 호출

비동기 호출에서 보안 설정