수신할 이벤트 유형 결정

이벤트를 수신하도록 등록하려면 먼저 수신할 이벤트의 유형이 내부 이벤트인지 아니면 외부 이벤트인지 확인해야 합니다. 이벤트를 수신하는 방법에 대한 자세한 내용은 WMI 이벤트 수신을 참조하세요. 이벤트를 제공하는 방법에 대한 자세한 내용은 WMI 공급자 개발이벤트 공급자 작성을 참조하세요. 이벤트 수신 및 제공의 보안 우려 사항에 대한 자세한 내용은 WMI 이벤트 보안을 참조하세요.

내부 이벤트

내부 이벤트는 표준 WMI 데이터 모델의 변경에 대한 응답으로 발생하는 이벤트입니다. 각 내장 이벤트 클래스는 특정 형식의 변경을 나타내며 WMI 또는 공급자가 네임스페이스, 클래스 또는 클래스 인스턴스를 만들거나 삭제하거나 수정할 때 발생합니다. 예를 들어, Win32_LogicalDisk 인스턴스를 만들면 __InstanceCreationEvent 인스턴스가 만들어집니다.

WMI는 WMI 리포지토리에 저장된 개체에 대한 내부 이벤트를 만듭니다. 공급자는 동적 클래스에 대한 내부 이벤트를 생성하지만, 공급자를 사용할 수 없는 경우 WMI가 동적 클래스에 대한 인스턴스를 만들 수 있습니다. WMI는 폴링을 사용하여 변경을 검색합니다. 다음 표에는 WMI가 내부 이벤트를 보고하는 데 사용하는 시스템 클래스가 나와 있습니다.

시스템 클래스 설명
__ClassCreationEvent 클래스가 만들어지면 소비자에게 알립니다.
__ClassDeletionEvent 클래스가 삭제되면 소비자에게 알립니다.
__ClassModificationEvent 클래스가 수정되면 소비자에게 알립니다.
__InstanceCreationEvent 클래스 인스턴스가 만들어지면 소비자에게 알립니다.
__InstanceOperationEvent 인스턴스 생성, 삭제, 수정과 같은 인스턴스 이벤트가 발생하면 소비자에게 알립니다. 쿼리에서 이 클래스를 사용하여 인스턴스와 관련된 모든 형식의 이벤트를 가져올 수 있습니다.
__InstanceDeletionEvent 인스턴스가 삭제되면 소비자에게 알립니다.
__InstanceModificationEvent 인스턴스가 수정되면 소비자에게 알립니다.
__NamespaceCreationEvent 네임스페이스가 만들어지면 소비자에게 알립니다.
__NamespaceDeletionEvent 네임스페이스가 삭제되면 소비자에게 알립니다.
__NamespaceModificationEvent 네임스페이스가 수정되면 소비자에게 알립니다.
__ConsumerFailureEvent 이벤트 소비자 측 실패로 인해 다른 이벤트가 삭제되면 소비자에게 알립니다.
__EventDroppedEvent 다른 이벤트가 이벤트를 요청한 소비자에게 전달되는 대신 삭제되면 소비자에게 알립니다.
__EventQueueOverflowEvent 배달 큐 오버플로의 결과로 이벤트가 삭제되면 소비자에게 알립니다.
__MethodInvocationEvent 메서드 호출 이벤트가 발생하면 소비자에게 알립니다.

 

외부 이벤트

외부 이벤트는 WMI 데이터 모델의 변경에 직접 연결될 수 없는 미리 정의된 발생입니다. 따라서 WMI에서는 이벤트 공급자가 이벤트를 설명하는 이벤트 클래스를 정의할 수 있도록 합니다. 외장 이벤트의 예로 대기 모드로 전환되는 컴퓨터를 설명하는 이벤트를 들 수 있습니다. 공급자는 __Event 시스템 클래스의 하위 클래스인 __ExtrinsicEvent 시스템 클래스에서 외부 이벤트를 파생합니다. 시스템 레지스트리SNMP 공급자는 레지스트리 키가 변경되면 소비자에게 알리는 RegistryKeyChangeEvent와 같은 외부 이벤트 클래스를 정의합니다. 자세한 내용은 시스템 레지스트리 이벤트 등록이벤트 공급자 작성을 참조하세요.

다음 예제에서는 이벤트 공급자가 하나 이상의 건물에 대한 보안 위반을 보고합니다. 다음 클래스는 보안 위반을 나타내는 외부 이벤트에 대해 정의될 수 있습니다.

class SecurityViolationEvent : __ExtrinsicEvent
{
   string Building;           // building where violation occurred
   sint32 EntranceNumber;     // entrance where violation occurred
   datetime TimeOfDetection;  // date and time of violation
}

소비자는 보안 위반 알림을 수신하기 위해 SecurityViolationEvent 이벤트 유형을 등록합니다. 달리 지정하지 않는 한, 소비자는 모든 기간 및 모든 건물에 대해 모든 보안 위반 알림을 수신합니다. 이벤트 클래스에는 소비자가 더 구체적인 이벤트를 요청하는 데 사용할 수 있는 정보도 포함되어 있습니다.

다음 예제에서는 쿼리가 24번 건물에 대해서만 소비자를 보안 위반 이벤트에 등록합니다.

SELECT * FROM SecurityViolationEvent WHERE Building = 24;