The following terms are used:
The host can trigger commands which get buffered by the service (with full HGCM parameter info). As soon as a client connects (or is ready to do some new work) it gets a buffered host command to process it. This command then will be immediately removed from the command list. If there are ready clients but no new commands to be processed, these clients will be set into a deferred state (that is being blocked to return until a new command is available).
If a client needs to inform the host that something happend, it can send a message to a low level HGCM callback registered in Main. This callback contains the actual data as well as the context ID to let the host do the next necessary steps for this context. This context ID makes it possible to wait for an event inside the host's Main API function (like starting a process on the guest and wait for getting its PID returned by the client) as well as cancelling blocking host calls in order the client terminated/crashed (HGCM detects disconnected clients and reports it to this service's callback).