3.2.4.1.1 IWbemObjectSink::Indicate Client Details
If there are no IWbemClassObject results to be reported, the client MUST NOT call the IWbemObjectSink::Indicate method.
Otherwise, the client MUST call the IWbemObjectSink::Indicate method one or more times until the entire IWbemClassObject results are delivered to the server. Each time the IWbemObjectSink::Indicate method is called, a subset of the result is delivered to the server. For a specific set of result objects, the client uses implementation-specific criteria to choose the number and timing of the IWbemObjectSink::Indicate method calls that are used to deliver the result objects.<81>
Clients that implement the ObjectArray structure MUST call IWbemObjectSink::Indicate by using DCOM Remote Protocol marshaling, as specified in [MS-DCOM], for the first time. If a server returns WBEM_S_NEW_STYLE, the client SHOULD send the remainder of the results by using the ObjectArray structure as specified in section 2.2.14. If the server does not return WBEM_S_NEW_STYLE, the client MUST send the remainder of the results from the IWbemObjectSink::Indicate call by using DCOM Remote Protocol marshaling, as specified in [MS-DCOM], and MUST NOT use the ObjectArray structure.
The following applies when the WMI server acts as an IWbemObjectSink client:
For each asynchronous operation, there MUST be only one call at a time: either IWbemObjectSink::Indicate or IWbemObjectSink::SetStatus. This is ensured by calling IWbemObjectSink::Indicate only if CallbackInProgress is FALSE. Set CallbackInProgress to TRUE before calling IWbemObjectSink::Indicate, and reset it to FALSE after the call is returned. IWbemOjbectSink::Indicate MUST NOT be called if CallCancelled is set to TRUE.
If IWbemObjectSink::Indicate returns an error, the server MUST do the following:
Set CallCancelled to TRUE in AsyncOperationTable for the entry identified by this IWbemObjectSink.
Send the final result with WBEM_E_CALL_CANCELLED.
Remove the entry for this operation in AsyncOperationTable.