## COM Objects, Interfaces, and Functions

This section defines the COM-based objects, including the interfaces and methods through which a client application makes use of object instances.

The objects are:

- Conference Manager—manager of the overall conference
- User—any potential participant in a conference, including:
  - anyone on a ULS server (an IP address)
  - someone you can call on IPX or TCP/IP
  - a phone number
- Conference—a conference in progress
- Member—a participant in a conference (subset of User)
- Channel—a conduit for a specific kind of media (audio, data, video)

Each conference that is created gets all default channels for a normal conference automatically. For this release, the conference will get four default channels—data transfer, file transfer, application sharing, and application control. Future releases will include channels for audio and video.

If the default channels are used, everyone in the conference sees the results. A file sent through the file transfer channel goes to everyone in the conference, for instance. However, some methods allow a user to operate on a particular member—for example, a file can be sent to one member through this open-to-all channel.

In a future release, new data channels can be created to include just a subset of conference members. For example, you will be able to create a file transfer channel that sends the file to only three of the four people in your conference.

A channel is allowed to have only one of the following usage-specific interfaces (for example, a channel cannot have both IConfDataExchange and IConfFileExchange):

- Client application
- Sharable application
- File transfer

Conference Manager is the first COM object a COM application must create. Only one Conference Manager object needs to be created per an application instance.

Objects other than Conference Manager are created in one of two ways:

- Through a method in another object (for example, by calling the IConferenceManager::CreateConference method to create a conference).

  The Conference, User, Communication Channel, and File Transfer objects are created this way.

- By object enumeration, in which the enumerator is instantiated through a method in another object (for example, by calling the IConference::EnumMember method).

  The objects created this way are:

  - Member
    - IConference::EnumMember
    - IConfChannel::EnumMember
  - Client Application
    - IConfUser::EnumApplication
    - IConfMember::EnumApplication
    - IConference::EnumApplication
  - Sharable Application
    - IConfAppSharing::EnumSharableApp

  This automatically provides the context of the objects to be enumerated. For instance, a list of Client Application objects whose enumerator is obtained from the IConfUser interface is the set of applications that the User object had, whereas a list of Client Application objects whose enumerator is obtained from the IConference interface is the set of applications that can make use of the particular conference session.

Some methods in the objects' interfaces are asynchronous and require a notification to the client application when an event takes place. This will be accomplished with outgoing interfaces as defined by COM's Connectable Objects. The object defines the interface; however, the actual implementation of the interface is in the client of the object. The object (notification sender) is called a source, and the client (notification receiver) is called a sink.

To have outgoing interfaces, an object must implement the IConnectionPointContainer interface. With this interface, the client can browse through each outgoing interface, called a connection point. Each connection point implements the IConnectionPoint interface. It is through IConnectionPoint that the client can ask for the identifier of an outgoing interface, and can give the connection point an interface pointer through which the connectable object sends notifications (that is, calls the functions in the sink). The outgoing interfaces and notifications are shown in the following table.

Object | Outgoing interface | Function/Notification
Conference Manager | IConfMgrNotify | InvitedToConference
|  | ConferenceCreated
Conference | IConferenceNotify | StateChanged
|  | RequestToJoin
|  | MemberChanged
|  | ChannelChanged
Communication Channel | IConfDataExchangeNotify | DataSent
|  | DataReceived
| IConfFileExchangeNotify | FileSent
|  | FileReceived
| IConfAppSharingNotify | StatusChanged
| IConfAppControlNotify | StatusChanged

Not all the interfaces nor methods in this specification need to be implemented. If an interface is not supported, the object returns E_NOINTERFACE. If the method is not supported, the calling method returns E_NOTIMPL.

The overall hierarchy of objects, interfaces, and methods are shown below.

Conference Manager
IConferenceManager | Initialize
| GetConferenceCapabilities
| EnumConference
| EnumUser
| CreateConference
| GetRemoteConference
| CreateUser
IConnectionPointContainer
IConnectionPoint—IConfMgrNotify | InvitedToConference
| ConferenceCreated
User
IConfUser | GetName
| GetType
| GetConferenceCapabilities
| IsMCU
| EnumConference
| EnumApplication
Conference
IConference | GetName
| GetConferenceCapabilities
| GetConferenceState
| IsSameAs>IsSameAs
| Invite
| AcceptInvite
| RejectInvite
| Join
| AcceptJoin
| RejectJoin
| EnumMember
| EnumApplication
| EnumChannelInterface
| EnumChannel
| CreateChannel
| Leave
IConnectionPointContainer
IConnectionPoint— IConferenceNotify | StateChanged
| RequestToJoin
| MemberChanged
| ChannelChanged
Member
IConfMember | GetName
| GetType
| GetConferenceCapabilities
| IsMCU
| EnumConference
| EnumApplication
| GetConference
| IsSelf
| IsSameAs
Communication Channel
IConfChannel | GetConference
| GetInterface
| IsSameAs
| IncludeMember
| ExcludeMember
| EnumMember
IConfDataExchange | SendData
IConfFileExchange | SetReceiveFileDir
| GetReceiveFileDir
| SendFile
| Cancel
IConfAppSharing | EnumSharableApp
IConfAppControl | StartRemoteInstance
| EnumPeer
IConnectionPointContainer
IConnectionPoint—IConfDataExchangeNotify | DataSent
| DataReceived
IConnectionPoint—IConfFileExchangeNotify | FileSent
| FileReceived
IConnectionPoint—IConfAppSharingNotify | StatusChanged
IConnectionPoint—IConfAppControlNotify | StatusChanged
Client Application
IConfApplication | GetGUID
| GetName
Sharable Application
IConfShareApp | GetName
| Share
| Unshare
| GetShareState
File Transfer Object
IConfFileTransfer | GetName
| GetBytesTransferred
| GetTotalSize
| GetFileState
| IsSameAs

### Conference Manager Object

The Conference Manager object is created with the CoCreateInstance function using a predefined class identifier (CLSID_ConferenceManager) and interface identifier (IID_IConferenceManager). It is the first COM object a client application must create. Only one Conference Manager object need be created per application instance. The object provides the following interfaces:

- IConferenceManager
- IConfMgrNotify

### IConferenceManager

IConferenceManager provides the following methods:

- Initialize
- GetConferenceCapabilities
- EnumConference
- EnumUser
- CreateConference
- GetRemoteConference
- CreateUser

#### IConferenceManager::Initialize

    HRESULT Initialize(
        REFGUID rguid);

Activates the Conference Manager object and allows the calling application to register itself to the conference services.

- Returns one of the following values:

  S_OK | Success.
  E_INVALIDARG | The rguid parameter is invalid.
  E_FAIL | The Conference Manager object was already initialized, or the conference services are not available.

rguid
  Globally unique identifier (GUID) that identifies the calling application.

#### IConferenceManager::GetConferenceCapabilities

    HRESULT GetConferenceCapabilities(
        ULONG *puConfCaps);

Determines which type of conferencing (audio, data, or video) is available on the local computer.

- Returns one of the following values:

  S_OK | Success.
  E_POINTER | The address in puConfCaps is invalid.
  E_FAIL | The Conference Manager object has not been initialized.

puConfCaps
  Address of a buffer to receive a bitmap of the local computer conferencing capabilities. Any of the following messages can be returned:

  CNFF_CAPS_NONE | Not capable of conferencing.
  CNFF_CAPS_DATA | Data conferencing.
  CNFF_CAPS_AUDIO | Audio conferencing.
  CNFF_CAPS_VIDEO | Video conferencing.

#### IConferenceManager::EnumConference

    HRESULT EnumConference(
        IEnumConf**ppEnumConf);

Determines if a conference is in progress.

- Returns one of the following values:

  S_OK | Success.
  E_POINTER | The address in ppEnumConf is invalid.
  E_FAIL | The Conference Manager object was not initialized, or internal resources are not available.
  E_OUTOFMEMORY | Memory could not be allocated to service the request.

ppEnumConf
  Address to receive an instance of the enumerator for existing Conference objects.

This method returns an instance of the enumerator for Conference objects for existing conferences. If there is a conference in progress, the person setting up another may choose to use the first rather than start a new one.

#### IConferenceManager::EnumUser

    HRESULT EnumUser(
        IEnumConfUser **ppEnumUser);

Determines available users who can become participants in a conference. It returns an instance of the enumerator for existing User objects.

- Returns one of the following values:

  S_OK | Success.
  E_POINTER | The address in ppEnumUser is invalid.
  E_FAIL | The Conference Manager object was not initialized, or internal resources are not available.
  E_OUTOFMEMORY | Memory could not be allocated to service the request.

ppEnumUser
  An address to receive an instance of the enumerator for existing User objects.

This method is not currently supported.

#### IConferenceManager::CreateConference

    HRESULT CreateConference(
        BSTR bstrName,
        ULONG uConfCaps,
        Iconference **ppConference);

Returns an instance of a new Conference object with the IConference interface.

- Returns one of the following values:

  S_OK | Success.
  E_POINTER | The address in ppConference is invalid.
  E_INVALIDARG | The bstrName string is invalid, or uConfCaps contains an invalid value.
  E_FAIL | The Conference Manager object was not initialized, or internal resources are not available.
  E_OUTOFMEMORY | Memory could not be allocated to service the request.

bstrName
  String to contain the conference name.
uConfCaps
  Bitmap to contain conferencing capabilities.
ppConference
  Address to receive an instance of the Conference object.

#### IConferenceManager::GetRemoteConference

    HRESULT GetRemoteConference(
        Iconference **ppConference);

Returns an instance of an ongoing Conference object from which the application was remotely activated by a remote node.

- Returns one of the following values:

  S_OK | Success.
  E_POINTER | The address in ppConference is invalid.
  E_FAIL | The Conference Manager object is not initialized, the application was not activated remotely, or internal resources are not available.
  E_OUTOFMEMORY | Memory could not be allocated to service the request.

ppConference
  Address to receive an instance of the Conference object.

The calling application should use the Conference object to communicate with the remote node.

#### IConferenceManager::CreateUser

    HRESULT CreateUser(
        BSTR bstrName,
        CONFUSERTYPE uType,
        IConfUser **ppUser);

Returns an instance of a new User object with the IConfUser interface.

- Returns one of the following values:

  S_OK | Success.
  E_POINTER | The address in ppUser is invalid.
  E_INVALIDARG | The bstrName string is invalid, or uType is not one of the valid types.
  E_FAIL | The Conference Manager object was not initialized, or internal resources are not available.
  E_OUTOFMEMORY | Memory could not be allocated to service the request.

bstrName
  String to contain the user's name or address.
uType
  Constant that shows the type of the user name/address:

  CNF_USER_UNKNOWN | Unknown transport.
  CNF_USER_IP | The user name contains an IP address.
  CNF_USER_MACHINENAME | The user name contains a computer name.
  CNF_USER_PSTN | The user name contains a telephone number.

ppUser
  Address to receive an instance of the User object.

### IConnectionPointContainer

This interface is instantiated from IID_IConnectionPointContainer to identify Conference Manager as a connectable object. The interface contains the standard set of methods for IConnectionPointContainer.

### IConnectionPoint

This interface is instantiated from IConnectionPointContainer. The client uses this interface to:

- Ask for the identifier of the Conference Manager object's outgoing interface—IID_IConfMgrNotify.
- Give in return the interface pointer through which the connectable object should send notifications (which it sends by calling the member functions implemented in the client)—IConfMgrNotify.

### IConfMgrNotify

To receive asynchronous event notifications from a Conference Manager object, a client application must implement the methods in the IConfMgrNotify interface, which is instantiated from IID_IConfMgrNotify.

The IConfMgrNotify interface provides the following methods:

- InvitedToConference
- ConferenceCreated

#### IConfMgrNotify::InvitedToConference

    HRESULT InvitedToConference(
        IConfUser *pUser,
        Iconference *pConference);

Starts when an application receives a call to give the application a pointer to the Conference object it is being invited to. Conference Manager must be initialized.

- Returns the following value:

  S_OK | Success.

pUser
  User who invited the local computer to the conference.
pConference
  Instance of the Conference object. The sink method needs to call the AddRef method to the Conference object if it wants to keep the object.

This event is not supported in the current version.

#### IConfMgrNotify::ConferenceCreated

    HRESULT ConferenceCreated(
        Iconference *pConference);

Starts when a new conference is activated by other applications. The Conference object can be used as if it were activated by the client application.

- Returns the following value:

  S_OK | Success.

pConference
  Instance of the Conference object. The sink method needs to call the AddRef method to the Conference object if it wants to keep the object.

### User Object

The User object is enumerated from the enumerator obtained from the IConferenceManager::EnumUser method.

This object provides one interface:

- IConfUser

### IConfUser

IConfUser is instantiated automatically when the object is obtained from the enumerator. It provides the following methods:

- GetName
- GetType
- GetConferenceCapabilities
- IsMCU
- EnumConference
- EnumApplication

#### IConfUser::GetName

    HRESULT GetName(
        BSTR *pbstrName);

Returns the string for the user name.

- Returns one of the following values:

  S_OK | Success.
  E_POINTER | The address in pbstrName is invalid.
  E_FAIL | The name is not valid, or internal resources are not available.
  E_OUTOFMEMORY | Memory could not be allocated to service the request.

pbstrName
  Address to receive a string for the user name or address.

#### IConfUser::GetType

    HRESULT GetType(
        CONFUSERTYPE *puType);

Determines the type of name for the User object.

- Returns one of the following values:

  S_OK | Success.
  E_POINTER | The address in puType is invalid.

puType
  Address of a buffer to receive the type of the user's name.

#### IConfUser::GetConferenceCapabilities

    HRESULT GetConferenceCapabilities(
        ULONG *puConfCaps);

Determines which type of conferencing (audio, data, or video) is available on the user's computer.

- Returns one of the following values:

  S_OK | Success.
  E_POINTER | The address in puConfCaps is invalid.

puConfCaps
  Address of a buffer to contain the capabilities of the computer.

This method is not supported in the current version.

#### IConfUser::IsMCU

    HRESULT IsMCU(void);

Determines whether the User object is a multipoint control unit (MCU).

- Returns one of the following values:

  S_OK | The user is an MCU.
  S_FALSE | The user is not an MCU.

This method is not supported in the current version.

#### IConfUser::EnumConference

    HRESULT EnumConference(
        IEnumConf  **ppEnumConf);

Returns an instance of the enumerator for existing Conference objects for the User object.

- Returns one of the following values:

  S_OK | Success.
  E_POINTER | The address in ppEnumConf is invalid.
  E_FAIL | Internal resources are not available.
  E_OUTOFMEMORY | Memory could not be allocated to service the request.

ppEnumConf
  Address to receive a conference enumerator

This method is not supported in the current version.

#### IConfUser::EnumApplication

    HRESULT EnumApplication(
        IEnumConfApp  **ppEnumApp);

Returns an instance of the enumerator for the Client Application object.

- Returns one of the following values:

  S_OK | Success.
  E_POINTER | The address in ppEnumApp is invalid.
  E_FAIL | Internal resources are not available.
  E_OUTOFMEMORY | Memory could not be allocated to service the request.

ppEnumApp
  Address to receive a Client Application enumerator.

This method is not supported in the current version.

### Conference Object

A Conference object may be:

- Created from the IConferenceManager::CreateConference method.
- Enumerated from the enumerator obtained from the IConferenceManager::EnumConference method.
- Offered through the IConfMgrNotify::InvitedToConference sink method.
- Offered through the IConfMgrNotify::ConferenceCreated sink method.
- Obtained from the IConfChannel::GetConference method.

The object provides the following interfaces:

- IConference
- IConferenceNotify

### IConference

The IConference interface provides the following methods:

- GetName
- GetConferenceCapabilities
- GetConferenceState
- IsSameAs
- Invite
- AcceptInvite
- RejectInvite
- Join
- AcceptJoin
- RejectJoin
- EnumMember
- EnumApplication
- EnumChannelInterface
- EnumChannel
- CreateChannel
- Leave

#### IConference::GetName

    HRESULT GetName(
        BSTR *pbstrName);

Returns the string for the conference name.

- Returns one of the following values:

  S_OK | Success.
  E_POINTER | The address in pbstrName is invalid.
  E_FAIL | The name is not valid, or internal resources are not available.
  E_OUTOFMEMORY | Memory could not be allocated to service the request.

pbstrName
  Address to receive a string for the conference name.

The conference name is passed in when the object is created by IConferenceManager::CreateConference, or is the name that existed when another user's conference was joined.

#### IConference::GetConferenceCapabilities

    HRESULT GetConferenceCapabilities(
        ULONG *puConfCaps);

Determines which type of conferencing (audio, data, or video) the Conference object was originally created with.

- Returns one of the following values:

  S_OK | Success.
  E_POINTER | The address in puConfCaps is invalid.

puConfCaps
  Address of a buffer to contain the capabilities of the conference.

#### IConference::GetConferenceState

    HRESULT GetConferenceState(
        CONFSTATE *puConfState);

Returns the state of the Conference object.

- Returns one of the following values:

  S_OK | Success.
  E_POINTER | The address in pConfState is invalid.

pConfState
  Address to receive a conference state. This can be any of the following values:

  CNF_STATE_IDLE | The conference is idle (just created).
  CNF_STATE_INITIALIZING | The conference is being initialized.
  CNF_STATE_ACTIVE | The conference is active and can be used.
  CNF_STATE_STOPPING | The conference is being terminated.
  CNF_STATE_OFFERED | The conference is offered.

#### IConference::IsSameAs

    HRESULT IsSameAs(
        IConference *pConference);

Identifies whether the two Conference objects represent the same conference.

- Returns one of the following values:

  S_OK | Both Conference objects represent the same conference.
  S_FALSE | Both Conference objects do not represent the same conference.
  E_INVALIDARG | The pConference address is invalid.
  E_NOINTERFACE | The pConference object does not have the required interface.

pConference
  Address of a Conference object instance to compare with.

#### IConference::Invite

    HRESULT Invite(
        IConfUser *pUser);

Invites a new user to the conference. If the Conference object is inactive, it becomes active when the invited user accepts the invitation.

- Returns one of the following values:

  S_OK | Success.
  E_INVALIDARG | The pUser address is invalid.
  E_NOINTERFACE | The object in pUser does not have the required interface.
  E_FAIL | The operation failed, or internal resources are not available.
  E_OUTOFMEMORY | Memory could not be allocated to service the request.

pUser
  Address of an instance of the User object.

This method is asynchronous (an event notification will be returned later if it is successful).

#### IConference::AcceptInvite

    HRESULT AcceptInvite(void);

Accepts an invitation to a conference. It is called in response to the IConfMgrNotify::InvitedToConference sink method.

- Returns one of the following values:

  S_OK | Success.
  E_FAIL | The operation failed, or internal resources are not available.
  E_OUTOFMEMORY | Memory could not be allocated to service the request.

This method will not be implemented for the first release because SCRAPI does not support it. For the first release, invitations will have to be accepted from Microsoft NetMeeting.

#### IConference::RejectInvite

    HRESULT RejectInvite(void);

Rejects an invitation to a conference. It is called in response to the IConfMgrNotify::InvitedToConference sink method.

- Returns one of the following values:

  S_OK | Success.
  E_FAIL | The operation failed, or internal resources are not available.
  E_OUTOFMEMORY | Memory could not be allocated to service the request.

This method will not be implemented for the first release because SCRAPI does not support it. For the first release, invitations will have to be rejected from Microsoft NetMeeting.

#### IConference::Join

    HRESULT Join(
        IConfUser *pUser);

Joins a user who already has a conference running.

- Returns one of the following values:

  S_OK | Success.
  E_INVALIDARG | The pUser address is invalid.
  E_NOINTERFACE | The object in pUser does not have the required interface.
  E_FAIL | The operation failed, or internal resources are not available.
  E_OUTOFMEMORY | Memory could not be allocated to service the request.

pUser
  Address of an instance of the User object.

#### IConference::AcceptJoin

    HRESULT AcceptJoin(
        IConfUser *pUser);

Accepts a request from a user to join a conference. This method is called in response to the IConferenceNotify::RequestToJoin sink method.

- Returns one of the following values:

  S_OK | Success.
  E_INVALIDARG | The pUser address is invalid.
  E_NOINTERFACE | The object in pUser does not have the required interface
  E_FAIL | The operation failed, or internal resources are not available.
  E_OUTOFMEMORY | Memory could not be allocated to service the request.

pUser
  Address of an instance of the User object.

This method will not be implemented for the first release because SCRAPI does not support it. For the first release, invitations will have to be accepted from Microsoft NetMeeting.

#### IConference::RejectJoin

    HRESULT RejectJoin(
        IConfUser *pUser);

Rejects a request from a user to join a conference. This method is called in response to the IConferenceNotify::RejectJoin sink method.

- Returns one of the following values:

  S_OK | Success.
  E_INVALIDARG | The pUser address is invalid.
  E_NOINTERFACE | The object in pUser does not have the required interface.
  E_FAIL | The operation failed, or internal resources are not available.
  E_OUTOFMEMORY | Memory could not be allocated to service the request.

pUser
  Addrress of an instance of the User object.

This method will not be implemented for the first release because SCRAPI does not support it. For the first release, invitations will have to be rejected from Microsoft NetMeeting.

#### IConference::EnumMember

    HRESULT EnumMember(
        IEnumConfMember **ppEnumMember);

Returns an instance of the enumerator for the Member object when the conference is active.

- Returns one of the following values:

  S_OK | Success.
  E_POINTER | The address in ppEnumMember is invalid.
  E_FAIL | Internal resources are not available.
  E_OUTOFMEMORY | Memory could not be allocated to service the request.

ppEnumMember
  Address to receive a member enumerator.

#### IConference::EnumApplication

    HRESULT EnumApplication(
        IEnumConfApp **ppEnumApp);

Returns an instance of the enumerator of the Application object when the conference is active.

- Returns one of the following values:

  S_OK | Success.
  E_POINTER | The address in ppEnumApp is invalid.
  E_FAIL | Internal resources are not available.
  E_OUTOFMEMORY | Memory could not be allocated to service the request.

ppEnumApp
  Address to receive an application enumerator.

#### IConference::EnumChannelInterface

    HRESULT EnumChannelInterface(
        IEnumChanInterface **ppEnumChanInterface);

Returns an instance of the enumerator of the Channel interface object available in the conference. The interface signifies how the channel can be used.

- Returns one of the following values:

  S_OK | Success.
  E_POINTER | The address in ppEnumChanInterface is invalid.
  E_FAIL | Internal resources are not available.
  E_OUTOFMEMORY | Memory could not be allocated to service the request.

ppEnumChanInterface
  Address to receive a channel interface enumerator.

#### IConference::EnumChannel

    HRESULT EnumChannel(
        IEnumConfChannel **ppEnumChannel);

Returns an instance of the enumerator of the existing Channel object in the conference.

- Returns one of the following values:

  S_OK | Success.
  E_POINTER | The address in ppEnumChannel is invalid.
  E_FAIL | Internal resources are not available.
  E_OUTOFMEMORY | Memory could not be allocated to service the request.

ppEnumChannel
  An address to receive a channel enumerator.

#### IConference::CreateChannel

    HRESULT CreateChannel(
        REFIID riid,
        IConfChannel *ppChannel);

Returns an instance of a new Channel object with the specified interface.

- Returns one of the following values:

  S_OK | Success.
  E_POINTER | The address in ppChannel is invalid.
  E_INVALIDARG | The riid parameter contains a channel interface that is not available in this conference.
  E_FAIL | The channel cannot be created, or internal resources are not available.
  E_OUTOFMEMORY | Memory could not be allocated to service the request.

riid
  An interface ID of the specific-type channel.
ppChannel
  Address to receive an instance of a new channel object.

This method is not supported in the current version.

#### IConference::Leave

    HRESULT Leave(void);

Removes the local computer from the active conference.

- Returns one of the following values:

  S_OK | Success.
  E_FAIL | The conference is not in the proper state, the operation failed, or internal resources are not available.

### IConnectionPointContainer

This interface is instantiated from IID_IConnectionPointContainer to identify a Conference object as connectable. The interface contains the standard set of methods for IConnectionPointContainer.

### IConnectionPoint

This interface is instantiated from IConnectionPointContainer. The client uses this interface to:

- Ask for the identifier of the Connection object's outgoing interface—IDD_IConferenceNotify.
- Give in return the interface pointer through which the connectable object should send notifications (which it sends by calling the methods implemented in the client)—IConferenceNotify.

### IConferenceNotify

To receive asynchronous event notifications from the Conference object, a client application must implement the methods in the IConferenceNotify interface, which is instantiated from IID_IConferenceNotify.

The IConferenceNotify interface must provide the following methods:

- StateChanged
- RequestToJoin
- MemberChanged
- ChannelChanged

#### IConferenceNotify::StateChanged

    HRESULT StateChanged(
        CONFSTATE uConfState,
        HRESULT hr);

Notifies the client that the status of the conference has changed. It also notifies the error result if the previous asynchronous method fails.

- Returns the following value:

  S_OK | Success.

uConfState
  The current conference state.
hr
  The result of the previous asynchronous operation.

#### IConferenceNotify::RequestToJoin

    HRESULT RequestToJoin(
        IConfUser *pUser);

Notifies the client that a user has made a request to join the conference.

- Returns the following value:

  S_OK | Success.

pUser
  An instance of the User object that wants to join the conference.

This event is not supported in the current version.

#### IConferenceNotify::MemberChanged

    HRESULT MemberChanged(
        IConfMember *pConfMember,
        CONFMEMBNOTIFY uNotify);

Notifies the client that the member roster for the conference has changed (someone has joined or left the conference).

- Returns the following value:

  S_OK | Success. The requested number of elements was returned.

pConfMember
  An instance of the Member object that is added or removed from the conference.
uNotify
  The enumerated constant for the notification type can be one of the following values:

  CNF_MEMB_ADDED | The member is being added to the conference.
  CNF_MEMB_REMOVED | The member is being removed from the conference.
  CNF_MEMB_UPDATED | The member information is changed.

#### IConferenceNotify::ChannelChanged

    HRESULT ChannelChanged(
        IConfChannel *pChannel,
        CONFCHANNOTIFY uNotify);

Notifies the client that a new channel is available in the conference.

- Returns the following value:

  S_OK | Success. The requested number of elements was returned.

pChannel
  An instance of the Channel object that is added or removed from the conference.
uNotify
  The enumerated constant for the notification type can be one of the following values:

  CNF_CHAN_ADDED | The channel is being added to the conference.
  CNF_CHAN_REMOVED | The channel is being removed from the conference.

This event is not supported in the current version.

### Member Object

A Member object is enumerated from the enumerator obtained from the IConference::EnumMember or the IConfChannel::EnumMember method. The object is derived from the User object and provides only one interface:

- IConfMember

### IConfMember

The IConfMember interface provides the following methods:

- GetName
- GetType
- GetConferenceCapabilities
- IsMCU
- EnumConference
- EnumApplication
- GetConference
- IsSelf
- IsSameAs

#### IConfMember::GetName

    HRESULT GetName(
        BSTR *pbstrName);

Returns the string for the member name.

- Returns one of the following values:

  S_OK | Success.
  E_POINTER | The address in pbstrName is invalid.
  E_FAIL | The name is not valid, or internal resources are not available.
  E_OUTOFMEMORY | Memory could not be allocated to service the request.

pbstrName
  Address to receive a string for the user name or address.

#### IConfMember::GetType

    HRESULT GetType(
        CONFUSERTYPE *puType);

Determines the type of name for the Member object.

- Returns one of the following values:

  S_OK | Success.
  E_POINTER | The address in puType is invalid.

puType
  Address to a buffer to receive the type of the member's name.

#### IConfMember::GetConferenceCapabilities

    HRESULT GetConferenceCapabilities(
        ULONG *puConfCaps);

Determines which type of conferencing (audio, data, or video) is available on the member's computer in the context of this conference.

- Returns one of the following values:

  S_OK | Success.
  E_POINTER | The address in puConfCaps is invalid.

puConfCaps
  Address to a buffer that contains the capabilities of the machine.

#### IConfMember::IsMCU

    HRESULT IsMCU(void);

Determines whether the Member object is a multipoint control unit (MCU).

- Returns one of the following values:

  S_OK | The user is an MCU.
  S_FALSE | The user is not an MCU.

This method is not supported in the current version.

#### IConfMember::EnumConference

    HRESULT EnumConference(
        IEnumConf **ppEnumConf);

Returns an instance of the enumerator for existing Conference objects for the Member object.

- Returns one of the following values:

  S_OK | Success.
  E_POINTER | The address in ppEnumConf is invalid.
  E_FAIL | Internal resources are not available.
  E_OUTOFMEMORY | Memory could not be allocated to service the request.

ppEnumConf
  Address to receive a conference enumerator.

This method is not supported in the current version.

#### IConfMember::EnumApplication

    HRESULT EnumApplication(
        IEnumConfApp **ppEnumApp);

Returns an instance of the enumerator for the Client Application object.

- Returns one of the following values:

  S_OK | Success.
  E_POINTER | The address in ppEnumApp is invalid.
  E_FAIL | Internal resources are not available.
  E_OUTOFMEMORY | Memory could not be allocated to service the request.

ppEnumApp
  Address to receive a Client Application enumerator.

This method is not supported in the current version.

#### IConfMember::GetConference

    HRESULT GetConference(
        Iconference **ppConference);

Returns the instance of the Conference object where the member belongs.

- Returns one of the following values:

  S_OK | Success.
  E_POINTER | The address in ppConference is invalid.
  E_FAIL | The conference no longer exists.

ppConference
  Address of a buffer to receive the instance of the Conference object.

#### IConfMember::IsSelf

    HRESULT IsSelf(void);

Determines if the Member object represents the local computer.

- Returns one of the following values:

  S_OK | The Member object represents the local machine.
  S_FALSE | The Member object does not represent the local machine.

#### IConfMember::IsSameAs

    HRESULT IsSameAs(
        IConfMember *pConfMember);

Determines if the two Member objects represent the same conference member.

- Returns one of the following values:

  S_OK | Both Member objects represent the same conference member.
  S_FALSE | Both Member objects do not represent the same conference member.
  E_INVALIDARG | The pConfMember address is invalid.
  E_NOINTERFACE | The pConfMember object does not have the required interface.

pConfMember
  Address of the Member object to be compared.

### Communication Channel Object

The Communication Channel object may be:

- Created from the IConference::CreateChannel method.
- Enumerated from the enumerator obtained from the IConference::EnumChannel method.
- Offered through the IConferenceNotify::ChannelChangedsink method.

The object provides the following interfaces:

- IConfChannel
- IConfDataExchange
- IConfFileExchange
- IConfAppSharing
- IConfAppControl
- IConfDataExchangeNotify
- IConfFileExchangeNotify
- IConfAppSharingNotify
- IConfAppControlNotify

### IConfChannel

The IConfChannel interface is instantiated automatically when the Conference object is created, explicitly created through the Conference object, obtained from the enumerator, or offered. The interface is common to all the Channel objects. It provides the following methods:

- GetConference
- GetInterface
- IsSameAs
- IncludeMember
- ExcludeMember
- EnumMember

#### IConfChannel::GetConference

    HRESULT GetConference(
        Iconference **ppConference);

Returns an instance of the Conference object to which the channel belongs. The Conference object is returned with the IConference interface.

- Returns one of the following values:

  S_OK | Success.
  E_POINTER | The address in ppConference is invalid.
  E_FAIL | The conference no longer exists.

ppConference
  Address of a buffer to receive the instance of the conference object.

#### IConfChannel::GetInterface

    HRESULT GetInterface(
        IID *piid);

Obtains the Channel-specific interface.

- Returns one of the following values:

  S_OK | Success.
  E_POINTER | The address in piid is invalid.

piid
  Address of a buffer to receive the channel-specific interface ID.

#### IConfChannel::IsSameAs

    HRESULT IsSameAs(
        IConfChannel *pConfChannel);

Identifies whether the two Channel objects represent the same channel.

- Returns one of the following values:

  S_OK | Both Member objects represent the same conference member.
  S_FALSE | Both Member objects do not represent the same conference member.
  E_INVALIDARG | The pConfChannel address is invalid.
  E_NOINTERFACE | The pConfChannel object does not have the required interface.

pConfChannel
  Address of the Channel object to be compared.

#### IConfChannel::IncludeMember

    HRESULT IncludeMember(
        IConfMember *pMember);

Gives a Member object use of the channel.

- Returns one of the following values:

  S_OK | Success. The requested number of elements was returned.
  E_INVALIDARG | The pMember address is invalid.
  E_NOINTERFACE | The pMember object does not have the required interface.
  E_FAIL | The operation failed, or internal resources are not available.

pMember
  Address of the Member object to be given use of the channel.

This method is not supported in the current version.

#### IConfChannel::ExcludeMember

    HRESULT ExcludeMember(
        IConfMember *pMember);

Prevents a Member object from using the channel.

- Returns one of the following values:

  S_OK | Success. The requested number of elements was returned.
  E_INVALIDARG | The pMember address is invalid.
  E_NOINTERFACE | The pMember object does not have the required interface.
  E_FAIL | The operation failed, or internal resources are not available.

pMember
  Address of the Member object to be prevented from using the channel.

This method is not supported in the current version.

#### IConfChannel::EnumMember

    HRESULT EnumMember(
        IEnumConfMember **ppEnumMember);

Returns an instance of the enumerator for the Member objects that are currently allowed to use the channel.

- Returns one of the following values:

  S_OK | Success.
  E_POINTER | The address in ppEnumMember is invalid.
  E_FAIL | Internal resources are not available.
  E_OUTOFMEMORY | Memory could not be allocated to service the request.

ppEnumMember
  Address to receive the Member object enumerator.

### IConfDataExchange

The IConfDataExchange interface is instantiated by an application, from the Channel object with IID_IConfDataExchange, when the application wants to exchange blocks of data with other members.

This interface provides the following method:

- Send Data

#### IConfDataExchange::SendData

    HRESULT SendData(
        IConfMember *pMember,
        IConfApplication *pApplication,
        ULONG uSize,
        byte *pvbuffer,
        ULONG uOptions);

Sends a block of data bytes through the channel to a specified application on the specified member's computer. The caller must not free the buffer until it receives the IConfDataExchangeNotify::DataSent event.

- Returns one of the following values:

  S_OK | Success.
  E_INVALIDARG | The pvBuffer address is invalid, or uOptions contains an invalid option.
  E_NOINTERFACE | The pMember or pApplication object does not have the required interface.
  E_FAIL | The specified data buffer was not sent, or internal resources are not available.
  E_OUTOFMEMORY | Memory could not be allocated to service the request.

pMember
  An instance of the Member object to send data to. If the parameter is NULL, the data is sent to all the members in the channel.
pApplication
  An instance of the Application object to send data to. If the parameter is NULL, the data is sent to the remote instance of the calling application.
uSize
  The size, in bytes, of the data in the buffer.
pvBuffer
  Address to a buffer that contains the data to be sent (size_is(uSize)).
uOptions
  Flags for data transfer options follow:

  CNFF_SDOPT_NONE | No option is specified.

### IConfFileExchange

The IConfFileExchange interface is instantiated by an application, from the Channel object with IID_IConfFileExchange, when the application wants to exchange files with other members.

This interface provides the following methods:

- SetReceiveFileDir
- GetReceiveFileDir
- SendFile
- Cancel

#### IConfFileExchange::SetReceiveFileDir

    HRESULT SetReceiveFileDir(
        BSTR bstrDir);

Sets the path to the directory where the received file will be stored on the local computer.

- Returns one of the following values:

  S_OK | Success.
  E_INVALIDARG | The bstrDir path is invalid.
  E_FAIL | The operation failed, or internal resources are not available.

bstrDir
  A string for the path to the directory where a received file will be stored.

#### IConfFileExchange::GetReceiveFileDir

    HRESULT GetReceiveFileDir(
        BSTR *pbstrDir);

Gets the path to the directory where the received file will be stored.

- Returns one of the following values:

  S_OK | Success.
  E_POINTER | The address in pbstrDir is invalid.
  E_FAIL | The operation failed, or internal resources are not available.
  E_OUTOFMEMORY | Memory could not be allocated to service the request.

pbstrDir
  Address of a string for the path to the directory where a received file will be stored.

#### IConfFileExchange::SendFile

    HRESULT SendFile(
        IConfMember *pMember,
        IConfApplication *pApplication,
        BSTR bstrFile,
        ULONG uOptions,
        IConfFileTransfer **ppFileTransfer);

Sends a file through the channel.

- Returns one of the following values:

  S_OK | Success.
  E_POINTER | The address in ppFileTransfer is invalid.
  E_INVALIDARG | The bstrFile string is invalid, or uOptions contains an invalid option.
  E_NOINTERFACE | The pMember or pApplication object does not have the required interface.
  E_FAIL | The specified file was not sent, the specified file does not exist, or internal resources are not available.
  E_OUTOFMEMORY | Memory could not be allocated to service the request.

pMember
  A Member object that will receive the file. If this parameter is NULL, the file is sent to all the members in the channel.
pApplication
  An Application object that will receive the transfer progress notification. If this parameter is NULL, the notification is sent to the remote instance of the calling application.
bstrFile
  The full path of the file to be sent.
uOptions
  Flags for file transfer options follow:

  CNFF_SFOPT_NONE | No option is specified.
  CNFF_SFOPT_NOUI | The default progress dialog user interface should not be used.
  CNFF_SFOPT_NOCOMPRESS | The file should not be compressed.

ppFileTransfer
  An address to a buffer to receive a File Transfer object.

#### IConfFileExchange::Cancel

    HRESULT Cancel(
        IConfFileTransfer *pFileTransfer);

Cancels the file being sent or received.

- Returns one of the following values:

  S_OK | Success.
  E_INVALIDARG | The pFileTransfer address is invalid.
  E_NOINTERFACE | The pFileTransfer object does not have the required interface.
  E_FAIL | The operation cannot be canceled, or internal resources are not available.

pFileTransfer
  Address of a File Transfer object to be sent or received.

### IConfAppSharing

The IConfAppSharing interface is instantiated by an application from the Channel object with IID_IConfAppSharing when it wants to share an application.

This interface provides the following method:

- EnumSharableApp

#### IConfAppSharing::EnumSharableApp

    HRESULT EnumSharableApp(
        IEnumConfShareApp **ppEnumShareApp);

Returns an instance of the ConfShareApp object enumerator for the applications that can be shared.

- Returns one of the following values:

  S_OK | Success.
  E_POINTER | The address in ppEnumShareApp is invalid.
  E_FAIL | Internal resources are not available.
  E_OUTOFMEMORY | Memory could not be allocated to service the request.

ppEnumShareApp
  Address to receive the sharable application enumerator.

The ConfShareApp object provides methods for sharing and unsharing the application.

### IConfAppControl

The IConfAppControl interface is instantiated by an application from the Channel object with IID_IConfAppControl.

This interface provides the following methods:

- StartRemoteInstance
- EnumPeer

#### IConfAppControl::StartRemoteInstance

    HRESULT StartRemoteInstance(
        IConfMember *pMember,
        IConfApplication *pApplication);

Accepts an Application object and starts its instance on the specified member in the channel.

- Returns one of the following values:

  S_OK | Success.
  E_NOINTERFACE | The pMember or pApplication object does not have the required interface.
  E_FAIL | The remote instance cannot be started, or internal resources are not available.
  E_OUTOFMEMORY | Memory could not be allocated to service the request.

pMember
  A Member object where the remote instance of the application will be started. If the parameter is NULL, the application will be started on all the members in the channel.
pApplication
  An Application object whose remote instance will be started. If the parameter is NULL, the method starts the remote instance of the calling application.

#### IConfAppControl::EnumPeer

    HRESULT EnumPeer(
        IConfApplication *pApplication,
        IEnumConfMember **ppEnumMember);

Returns an instance of the enumerator for the Member object that currently has the application running.

- Returns one of the following values:

  S_OK | Success.
  E_POINTER | The address in ppEnumMember is invalid.
  E_NOINTERFACE | The pApplication object does not have the required interface.
  E_FAIL | Internal resources are not available.
  E_OUTOFMEMORY | Memory could not be allocated to service the request.

pApplication
  An Application object whose remote instance. If the parameter is NULL, the method uses the calling application.
ppEnumMember
  Addrerss of the Member object enumerator.

### IConnectionPointContainer

This interface is instantiated from IID_IConnectionPointContainer to identify the Communication Channel object as a connectable object. The interface contains the standard set of methods for IConnectionPointContainer.

### IConnectionPoint

This interface is instantiated from IConnectionPointContainer. The client uses this interface to:

- Ask for the identifier for each of the Communication Channel object's outgoing interfaces:
  - IDD_IConfDataExchangeNotify
  - IDD_IConfFileExchangeNotify
  - IDD_IConfAppSharingNotify
  - IDD_IConfAppControlNotify
- Give in return the interface pointers through which the connectable object should send notifications (which it sends by calling the member functions implemented in the client):
  - IConfDataExchangeNotify
  - IConfFileExchangeNotify
  - IConfAppSharingNotify
  - IConfAppControlNotify

### IConfDataExchangeNotify

To receive asynchronous event notifications relating to the exchange of data from the Communications Channel object, a client application must implement the methods in the IConfDataExchangeNotify interface, which is instantiated from IID_IConfDataExchangeNotify.

The IConfDataExchangeNotify interface must provide the following methods:

- DataSent
- DataReceived

#### IConfDataExchangeNotify::DataSent

    HRESULT DataSent(
        IConfMember *pMember,
        ULONG uSize,
        byte *pvBuffer,
        HRESULT hr);

Provides status notification of data sent, including the result of the operation.

- Returns the following value:

  S_OK | Success. The requested number of elements was returned.

pMember
  An instance of the Member object that received the data. The parameter is NULL if the data was sent to all the members.
uSize
  The amount of data sent, in bytes.
pvBuffer
  Address to the buffer that contains the sent data (size_is(uSize)). This is the same address that the caller passed into the IConfDataExchange::SendData method. When the sink object receives this event, the data buffer can be released.
hr
  The result of the data transfer.

#### IConfDataExchangeNotify::DataReceived

    HRESULT DataReceived(
        IConfMember *pMember,
        ULONG uSize,
        byte *pvBuffer,
        HRESULT hr);

Provides status notification of data received.

- Returns the following value:

  S_OK | Success. The requested number of elements was returned.

pMember
  The instance of the Member object from which the data was received.
uSize
  The amount of data received, in bytes.
pvBuffer
  Address to the buffer that contains the received data (size_is(uSize)).
hr
  The result of the data transfer.

The data buffer is valid only during the event notification, and is freed by the source object once the notification is over.

### IConfFileExchangeNotify

To receive asynchronous event notifications relating to the exchange of files from the Communications Channel object, a client application must implement the methods in the IConfFileExchangeNotify interface, which is instantiated from IID_IConfFileExchangeNotify.

The IConfFileExchangeNotify interface provides the following methods:

- FileSent
- FileReceived

#### IConfFileExchangeNotify::FileSent

    HRESULT FileSent(
        IConfMember *pMember,
        IConfFileTransfer *pFileTransfer,
        HRESULT hr);

Provides notification of file sent status. This method can be used multiple times to get progress information from the File Transfer object.

- Returns the following value:

  S_OK | Success. The requested number of elements was returned.

pMember
  An instance of the Member object where the file is sent.
pFileTransfer
  An instance of the File Transfer object.
hr
  The result of the file transfer operation.

#### IConfFileExchangeNotify::FileReceived

    HRESULT FileReceived(
        IConfMember *pMember
        IConfFileTransfer *pFileTransfer,
        HRESULT hr);

Provides notification of file received status. This method can be used multiple times to get progress information.

- Returns the following value:

  S_OK | Success. The requested number of elements was returned.

pMember
  The instance of the Member object from which the file was received.
pFileTransfer
  An instance of the File Transfer object.
hr
  The result of the file transfer operation.

### IConfAppSharingNotify

To receive asynchronous event notifications relating to the sharing of applications from the Communications Channel object, a client application must implement the methods in the IConfAppSharingNotify interface, which is instantiated from IID_IConfAppSharingNotify.

The IConfAppSharingNotify interface provides the following method:

- StatusChanged

#### IConfAppSharingNotify::StatusChanged

    HRESULT StatusChanged(
        IConfShareApp *pShrApp,
        CONFSHRSTATE uShareStatus
        HRESULT hr);

Provides notification when a sharable application becomes shared or unshared.

- Returns the following value:

  S_OK | Success. The requested number of elements was returned.

pShrApp
  The instance of the ConfShareApp object.
uShareStatus
  The current sharing status can be one of the following values:

  CNF_SHR_UNKNOWN | The application status is unknown.
  CNF_SHR_SHARED | The application is shared.
  CNF_SHR_UNSHARED | The application is not shared.

hr
  The result of the application sharing operation.

### IConfAppControlNotify

To receive asynchronous event notifications relating to the control of the remote instance of the application from the Communications Channel object, a client application must implement the methods in the IConfAppControlNotify interface, which is instantiated from IID_IConfAppControlNotify.

The IConfAppControlNotify interface provides the following method:

- StatusChanged

#### IConfAppControlNotify::StatusChanged

    HRESULT StatusChanged(
        IConfMember *pMember,
        IConfApplication *pApplication,
        CONFAPPSTATE uAppStatus,
        HRESULT hr);

Provides notification when the remote instance of an application on a member changes its status.

- Returns the following value:

  S_OK | Success. The requested number of elements was returned.

pMember
  An instance of the Member object whose application instance is changing its status.
pApplication
  An instance of the Application object.
uAppStatus
  The current status for application invocation is represented by one of the values below:

  CNF_APP_UNKNOWN | The state of the remote instance of the application is unknown.
  CNF_APP_STARTED | The remote instance of the application is started.
  CNF_APP_STOPPED | The remote instance of the application is stopped.

hr
  The result of the remote instance invocation.

### Client Application Object

The Client Application object, or Application object, is enumerated from the enumerator obtained from the IConfUser::EnumApplication or the IConference::EnumApplication method.

The object provides the following interface:

- IConfApplication

### IConfApplication

The IConfApplication interface is instantiated automatically when the object is enumerated from the enumerator.

The interface provides the following methods:

- GetGUID
- GetName

#### IConfApplication::GetGUID

    HRESULT GetGUID(
        GUID *pGUID);

Returns the application's globally unique identifier (GUID).

- Returns one of the following values:

  S_OK | Success.
  E_POINTER | The address in pGUID is invalid.

pGUID
  Address of a buffer to receive the application's unique identifier.

#### IConfApplication::GetName

    HRESULT GetName(
        BSTR *pbstrName);

Returns the string to contain the application name.

- Returns one of the following values:

  S_OK | Success.
  E_POINTER | The address in pbstrName is invalid.
  E_OUTOFMEMORY | Memory could not be allocated to service the request.

pbstrName
  Address to receive a string for the application name.

### Sharable Application Object

The Sharable Application object, or Share Application object, is enumerated from the enumerator obtained from the IConfAppSharing::EnumSharableApp method.

The object provides the following interface:

- IConfShareApp

### IConfShareApp

The IConfShareApp interface is instantiated automatically when the object is enumerated from the enumerator.

The interface provides the following methods:

- GetName
- Share
- Unshare
- GetShareState

#### IConfShareApp::GetName

    HRESULT GetName(
        BSTR *pbstrName);

Returns the string for the share application name.

- Returns one of the following values:

  S_OK | Success.
  E_POINTER | The address in pbstrName is invalid.
  E_FAIL | The application no longer exists, or internal resources are not available.
  E_OUTOFMEMORY | Memory could not be allocated to service the request.

pbstrName
  An address to receive a string for the share application name.

#### IConfShareApp::Share

    HRESULT Share(void);

Shares the application on all the members in the channel.

- Returns one of the following values:

  S_OK | Success. The requested number of elements was returned.
  E_FAIL | The operation failed.

#### IConfShareApp::Unshare

    HRESULT Unshare(void);

Unshares the application on all the members in the channel.

- Returns one of the following values:

  S_OK | Success. The requested number of elements was returned.
  E_FAIL | The operation failed.

#### IConfShareApp::GetShareState

    HRESULT GetShareState(
        CONFSHRSTATE *puShrState);

Retrieves the "share" state of the application.

- Returns one of the following values:

  S_OK | Success.
  E_POINTER | The address in puShrState is invalid.

puShrState
  Address of a buffer to receive the current "share" state of the application:

  CNF_SHR_UNKNOWN | The application state is unknown.
  CNF_SHR_SHARED | The application is being shared.
  CNF_SHR_UNSHARED | The application is not being shared.

### File Transfer Object

A File Transfer object is obtained from the IConfFileExchangeNotify::FileSent or IConfFileExchangeNotify::FileReceived method.

The object provides the following interface:

- IConfFileTransfer

### IConfFileTransfer

The IConfFileTransfer interface provides the following methods:

- GetName
- GetBytesTransferred
- GetTotalSize
- GetFileState
- IsSameAs

#### IConfFileTransfer::GetName

     HRESULT GetName(
        BSTR *pbstrName);

Returns the string for the full path of the file.

- Returns one of the following values:

  S_OK | Success.
  E_POINTER | The address in pbstrName is invalid.
  E_FAIL | Internal resources are not available.
  E_OUTOFMEMORY | Memory could not be allocated to service the request.

pbstrName
  Address to receive a string for the full path of the file.

#### IConfFileTransfer::GetBytesTransferred

    HRESULT GetBytesTransferred(
        ULONG *puBytes);

Returns the number of bytes transferred.

- Returns one of the following values:

  S_OK | Success.
  E_POINTER | The address in puBytes is invalid.

puBytes
  Address of a buffer to receive the number of bytes transferred.

#### IConfFileTransfer::GetTotalSize

    HRESULT GetTotalSize(
        ULONG *puBytes);

Returns the size, in bytes, of the file.

- Returns one of the following values:

  S_OK | Success.
  E_POINTER | The address in puBytes is invalid.

puBytes
  An address to a buffer to receive the size (in bytes) of the file.

#### IConfFileTransfer::GetFileState

    HRESULT GetFileState(
        CONFFILESTATE *puState);

Returns the state of the File Transfer object.

- Returns one of the following values:

  S_OK | Success.
  E_POINTER | The address in puState is invalid.

puState
  Address to a buffer to receive the state of the file. This can be filled by one of the following values:

  CNF_FILE_IDLE | The file-transfer operation was requested but not yet initialized.
  CNF_FILE_INITIALIZING | The file-transfer operation was requested and is now initialized.
  CNF_FILE_PROGRESS | The file-transfer operation is in progress.
  CNF_FILE_COMPLETE | The file-transfer operation is completed.

Note that the CNF_FILE_COMPLETE value simply represents completion of the operation. The operation may have completed due to success, cancellation, or failure.

#### IConfFileTransfer::IsSameAs

    HRESULT IsSameAs(
        IConfFileTransfer *pFileTransfer);

Identifies whether the two File Transfer objects represent the same file-transfer operation.

- Returns one of the following values:

  S_OK | Both File Transfer objects represent the same operation.
  S_FALSE | Both File Transfer objects do not represent the same operation.
  E_INVALIDARG | The pFileTransfer address is invalid.
  E_NOINTERFACE | The pFileTransfer object does not have the required interface.

pFileTransfer
  Address of the File Transfer object to compare with.

© 1996 Microsoft Corporation