Next, the application needs to obtain a handle to a capable telephone line. The application opens the line with lineOpen, but before doing this, it must make sure that the line can support the desired type of call. Invoking the lineGetDevCaps function returns that information to the application in a data structure of type LINEDEVCAPS. If data calls were not supported, this fact could be reported to the user in a dialog box. The application does not need to use lineGetDevCaps before every call, because a line's capabilities should remain static. If the local telephonic configuration (as expressed in .ini files) changes, TAPI notifies applications, which can then call lineGetDevCaps to see what has changed.
One of the values returned by lineGetDevCaps (as a member in the LINEDEVCAPS structure) is the number of addresses assigned to the specified line device. In this example, a single device has a single address.
Ownership of a call is a type of privilege. Applications obtain owner or monitor privilege to new incoming calls by specifying the desired privilege as a parameter of lineOpen. The privilege with which a line is opened remains in effect for subsequent calls used by that application on that line. An application always has owner privileges on calls it creates. When the application opens a line to place calls (as opposed to taking incoming calls) it invokes lineOpen with the privilege LINECALLPRIVILEGE_NONE, which insulates the application from incoming calls while allowing outgoing calls. The other privileges used with the lineOpen function are only for incoming calls.
The LINEOPENOPTION_SINGLEADDRESS option is available when using the lineOpen function to allow the application to specify that handles for new calls (either monitor or owner handles) should be delivered to the application only if the address on which the call appears matches the address provided as a function parameter. This is extremely useful when different addresses on a line are designated for calls of different media modes.