다음을 통해 공유


논리 소비자를 사용하여 이벤트 필터 바인딩

논리적 이벤트 소비자와 이벤트 필터를 만든 후에는 필터에 의해 지정된 이벤트에 대한 알림을 받을 논리적 소비자를 등록하는 이들을 연결해야 합니다.

다음 절차에서는 이벤트 필터를 논리적 소비자와 바인딩하는 방법에 대해 설명합니다.

논리 소비자를 사용하여 이벤트 필터를 바인딩하려면

  1. WMI 리포지토리에서 __FilterToConsumerBinding 시스템 클래스의 인스턴스를 만듭니다.

    __FilterToConsumerBinding 클래스는 필터소비자 참조 속성을 통해 이벤트 필터 인스턴스와 논리적 소비자 인스턴스를 함께 연결하는 연결 클래스입니다. 자세한 내용은 연결 클래스 선언을 참조하세요.

  2. 필터 속성을 필터 인스턴스로 설정합니다.

  3. 소비자 속성을 논리적 소비자의 인스턴스로 설정합니다.

  4. 원하는 전송 유형을 결정하려면 DeliverSynchronously 속성을 설정합니다.

    DeliverSynchronously 속성은 WMI가 동기식 또는 비동기식으로 이벤트 알림을 전달하는 시기를 결정합니다. 이 속성을 TRUE로 설정하면 동기 전송이 요청됩니다. 영구 소비자가 약 100마이크로초 내에 이벤트를 처리할 수 있는 경우에만 동기 전달을 사용합니다.

    참고

    싱크에 대한 콜백은 클라이언트에서 요구하는 것과 동일한 인증 수준으로 반환되지 않을 수 있으므로 비동기 통신 대신 반동기를 사용하는 것이 좋습니다. 자세한 내용은 메서드 호출을 참조하세요.

     

  5. 논리적 이벤트 소비자 등록을 취소할 때 __FilterToConsumerBinding 인스턴스를 삭제해야 합니다.

    __FilterToConsumerBinding 인스턴스는 특정 이벤트 알림에 대한 등록을 나타냅니다. 바인딩을 삭제하면 WMI가 등록을 비활성화합니다. 구현에 따라 등록을 비활성화하려면 논리적 소비자 및 이벤트 필터 인스턴스를 삭제해야 할 수 있습니다.

다음 코드 예제는 ActiveScriptEventConsumer 클래스의 인스턴스를 특정 이벤트 필터와 연결하는 __FilterToConsumerBinding 인스턴스를 보여줍니다(이벤트 소비자의 인스턴스는 논리 소비자 만들기 항목에서 생성되었고 이벤트 필터는 이벤트 필터 만들기 항목에서 생성됨).

instance of __FilterToConsumerBinding
{
    Filter = $FILTER;
    Consumer = $CONSUMER;
    DeliverSynchronously=FALSE;

    // this is the Administrators SID in array of bytes format
    CreatorSID = {1,2,0,0,0,0,0,5,32,0,0,0,32,2,0,0}; 
};

ActiveScriptEventConsumerCommandLineEventConsumer라는 두 소비자는 생성자가 로컬 관리자 그룹의 멤버가 아니면 작동하지 않습니다.

: 관리자가 구독을 생성할 때 그의 SID는 CreatorSID 속성에 사용되지 않지만 대신 로컬 관리자 그룹의 SID가 사용됩니다. 따라서 다른 관리자들이 인스턴스를 생성할 수 있으며 구독은 계속 작동합니다. 자세한 내용은 안전하게 이벤트 수신을 참조하세요.

필터가 논리적 소비자에 바인딩되면 이벤트는 Windows용 이벤트 추적(ETW)에 의해 기록됩니다. 자세한 내용은 WMI 활동 추적을 참조하세요.

항상 이벤트 수신