Permanent Consumer Architecture

[This is preliminary documentation and subject to change.]

The permanent consumer architecture consists of the following components:

Component Description
Logical consumer Instance of a class derived from the __EventConsumer system class. The properties of the class describe the action to be taken upon receipt of a notification.
Event filter Instance of the __EventFilter system class that describes an event type and the conditions under which a notification is delivered.
Consumer - filter binding Instance of the __FilterToConsumerBinding system class that describes a relationship between a logical consumer and an event filter.
Physical consumer (sink) COM object implementing the IWbemUnboundObjectSink interface. Known as the sink, it identifies a physical destination for a particular notification.
Event consumer provider WBEM provider that implements the IWbemEventConsumerProvider interface and provides access to a sink associated with a logical consumer.

A developer and an administrator typically share the responsibility for creating the logical consumer class and the various instances and for implementing the COM objects. The developer creates the logical consumer class and implements the two COM objects: the event consumer provider and the physical consumer. The administrator creates the logical consumer, event filter, and binding instances.

The following diagram shows how these components interact with CIMOM and the order in which the interaction occurs. First, CIMOM receives a notification to deliver. CIMOM examines the notification to determine if it matches any of the registered event filters. Next, to notify logical consumers, CIMOM examines the bindings for any of the filters that match.

For each logical consumer that is bound to a matching filter, CIMOM must then locate a corresponding event consumer provider. The event consumer provider bridges the gap between a logical consumer referenced in a binding and the physical sink that is dedicated to receive the notification. To locate and start the event consumer provider for a particular logical consumer, CIMOM uses the information registered by the provider. Once started, CIMOM calls the event consumer provider's IWbemEventConsumerProvider::FindConsumer method.

FindConsumer creates an instance of the physical consumer, which is also known as the sink. The physical consumer is the other COM object in the permanent consumer architecture. A physical consumer does not expose a CLSID; it implements only the IWbemUnboundObjectSink interface to provide the processing necessary to handle the event. CIMOM calls IWbemUnboundObjectSink::IndicateToConsumer, and includes a pointer to the logical consumer in its parameter list.

CIMOM releases its pointer to the event consumer provider after a configurable amount of time has passed. To configure this time value:

  1. Locate the singleton instance of the __EventConsumerProviderCacheControl class in the Root namespace.
  2. Set its single property to a time value that conforms to the DMTF time format. The new time value will take effect immediately.