이벤트 공급자 작성

이벤트 공급자는 내장 이벤트 및 외장 이벤트의 알림을 WMI에 제공하는 COM 개체입니다. 내장 이벤트는 내부 데이터 변경 내용을 WMI에 보고하는 반면, 내장 이벤트는 내장 이벤트에 설명되지 않은 사용자 정의 이벤트를 보고합니다. 예를 들어 Win32_LogicalDisk 클래스의 변경, 생성 또는 삭제에 대한 응답으로 이벤트가 내장 이벤트로 분류됩니다. 기존 WMI 개체의 수정, 생성 또는 삭제 이외의 작업을 기준으로 생성되는 이벤트는 외장 이벤트입니다. 지원되는 클래스에 관계없이 모든 이벤트 공급자를 동일한 방식으로 구현할 수 있습니다.

다음 절차에서는 이벤트 공급자를 구현하는 방법을 설명합니다.

이벤트 공급자를 구현하려면

  1. WMI를 사용하여 클래스 공급자를 디자인하고 등록합니다.

    클래스 공급자는 __Win32Provider 인스턴스 및 __EventProviderRegistration 클래스를 만들어 WMI에 등록합니다. 자세한 내용은 이벤트 공급자 등록을 참조하세요.

  2. 공급자에 대한 IWbemProviderInit 인터페이스를 구현합니다.

    IWbemProviderInit 인터페이스는 WMI가 모든 공급자를 로드하고 초기화하는 데 사용하는 일반적인 인터페이스입니다. 자세한 내용은 공급자 초기화를 참조하세요.

  3. 공급자에 대한 기본 인터페이스로 IWbemEventProvider를 구현합니다.

    IWbemEventProvider 인터페이스는 ProviderEvents 메서드를 사용하여 WMI에 이벤트를 제공합니다. 자세한 내용은 이벤트 공급자의 기본 인터페이스 구현을 참조하세요.

    참고

    이벤트 공급자는 다중 스레딩 모델 "둘 다"를 사용해야 합니다.

     

  4. 필요에 따라 IWbemEventProviderQuerySink 인터페이스를 구현하여 이벤트 공급자의 성능을 높일 수도 있습니다.

    IWbemEventProviderQuerySink 인터페이스를 사용하면 공급자가 WMI에 응답을 보내기 전에 쿼리를 최적화할 수 있으며, 이 인터페이스는 여러 형식의 이벤트를 제공하고 가능한 한 많은 내부 최적화를 수행해야 하는 공급자에게 가장 유용합니다. 자세한 내용은 이벤트 공급자 최적화를 참조하세요.

  5. IWbemEventProviderSecurity 인터페이스를 구현하여 소비자를 특정 SID(보안 식별자)로 제한하거나 IWbemEventSink::SetSinkSecurity를 구현하여 싱크 자체를 보호합니다. 공급자는 MOF 코드에서 개별 이벤트를 보호하도록 이벤트 클래스의 SECURITY_DESCRIPTOR 속성을 설정할 수도 있습니다. 자세한 내용은 WMI 이벤트 보안을 참조하세요.

  6. 공급자에 필요한 코드를 추가합니다.

    공급자를 디자인할 때 WMI 인터페이스를 호출해야 할 가능성이 큽니다. 자세한 내용은 메서드 호출을 참조하세요.

    클라이언트에 대한 정보를 검색할 때 해당 클라이언트의 보안 수준에 액세스해야 할 수 있습니다. 자세한 내용은 클라이언트 가장을 참조하세요.

  7. 기존 공급자를 새 코드로 바꿉니다.

    복사할 기존 공급자가 없는 경우 이 단계를 수행할 필요가 없습니다. 자세한 내용은 공급자 업데이트를 참조하세요.

클라이언트 애플리케이션은 자신을 WMI에 이벤트 소비자로 등록하여 이벤트를 요청할 수 있습니다. 자세한 내용은 WMI 이벤트 수신을 참조하세요.