Unlike line devices and addresses, calls are dynamic. A call or call appearance represents a connection between two (or more) addresses. The originating address (the caller) is the address from which the call originates, and the destination address (the called) identifies the remote endpoint or station with which the originator wants to communicate.
Zero, one, or more calls can exist on a single address at any given time. A familiar example of multiple calls on a single address is call waiting. During a conversation with one party, a subscriber with call waiting is alerted that another party is trying to call. The subscriber can flash the phone to answer the second caller (which automatically places the first party on hold), and then toggle between the two parties by flashing. In this example, the subscriber has two calls on one address on the line. Because the person at the telephone handset can be talking to only one remote party at a time, only one call is active per line at any point in time. The telephone switch keeps the other calls on hold. With a line able to encompass more than one channel, different configurations can allow multiple active calls on one line at a time.
The Telephony SPI identifies a specific call by means of a call handle, and tapi32.dll and the service provider both assign call handles as required. Because each needs to allocate a data structure to maintain the state information it associates with a call, each has its own handle. At the start of the lifetime of a call, tapi32.dll and the service provider exchange handles with one another. Then when tapi32.dll calls a function to operate on a call, it passes the service provider's handle. Typically, the service-provider designer implements its handles as pointers or array indexes. This allows simple and efficient access to the associated data structure given the handle. The tapi32.dll uses similar techniques to find its associated data structure when the service provider sends it a message that includes a call handle.
The tapi32.dll tells the service provider to dispose of a call handle by calling TSPI_lineCloseCall.