3.1.5 Timer Events
The Windows Management Instrumentation Remote Protocol uses four timers:
Sink timer: If the timer expires and the call is not completed, the server MUST cancel the asynchronous operation for which the timer expired.
Backup Timer: If the timer expires, the server MUST resume operations by simulating IWbemBackupRestoreEx::Resume and MUST reset the timer to 0.
EventPollingTimer: If the timer expires, the server MUST query for the instances of the underlying CIM class (for which the notifications are requested) in the corresponding EventFilter in the EventBindingTable, and store them in CurrInstances (which is array of IWbemClassObject objects). The server MUST compare CurrInstances to PrevInstances already stored in the event.
If an instance exists only in CurrInstances and is not present in PrevInstances, and the FROM clause of the EventFilter has __InstanceCreationEvent, the server MUST prepare an __InstanceCreationEvent object with the TargetInstance set to new object found in CurrInstances array.
If an instance only exists in PrevInstances and is not present in CurrInstances, and the FROM clause of the EventFilter has __InstanceDeletionEvent, the server MUST prepare an __InstanceDeletionEvent object with the TargetInstance set to old object in PrevInstances array.
If the instance exists in both the arrays, then the server MUST compare the properties of the objects. If they are not same and the FROM clause of the EventFilter has __InstanceModificationEvent, the server MUST prepare an __InstanceModificationEvent object with the PreviousInstance set to old object in PrevInstances array and the TargetInstance set to new object found in CurrInstances array.
-
The server MUST add each of the above events object prepared to the EventQueue, deliver the events that have accumulated in the EventQueue (ignoring delivery failures), clear the queue, move CurrInstances array into PrevInstances array, and restart the timer.
EventGroupingTimer: If the timer expires, the server MUST
Follow the same procedure followed for EventPollingTimer to create the __InstanceCreationEvent, __InstanceDeletionEvent, and __InstanceModificationEvent events, and add them to EventGroupAggregateQueue.
Examine the events that have accumulated in the EventGroupAggregateQueue and discard those that do not match the "HAVING" clause of the filter (if specified).
Deliver the remaining events to the client, ignoring delivery failures.
Clear EventGroupAggregateQueue.
Restart the timer.