Microsoft NetMeeting Software Developers Kit

Microsoft NetMeeting Software Developers Kit Last updated: November 1, 1997

Your browser does not support frames. For the latest release of Internet Explorer
CLICK HERE.


Topic Not Found

No matching topic was found. Some possible reasons and remedies are as follows:

  • The file (.chm) that contains the destination topic is not in the expected location.

    Remedy: Rerun the MSDN Library Setup.

  • The file (.chm) that contains the current topic or destination topic is out-of-date and the link is no longer valid.

    Remedy: Install the latest version of the MSDN Library.

  • The MSDN Library CD is not in the CD-ROM drive.

    Remedy: Insert the MSDN Library CD into the CD-ROM drive.


Contents

Introduction *
What's New *
Getting Started *
  • Downloading the NetMeeting SDK
  • Installing the NetMeeting SDK
  • Enabling Application Sharing on Windows NT 4.0
    • NMInstallNTDisplayDriver
  • Installing NetMeeting 2.1
  • Disabling the NetMeeting Wizard
Dependencies *
Standards and Interoperability *
  • The H.323 Standard
    • H.323 Components
  • The T.120 Standard
    • T.120 Components
  • Lightweight Directory Access Protocol
  • Additional conferencing standards information
    • Standards Organizations
NetMeeting Architecture *
SDK Usage Examples *
  • Customer Service from a Web page
  • Add Application Sharing Functionality
  • Add Audio/Video to an Application
  • Distance Learning
  • Help Desk
  • Multiplayer Game
Tutorials and Samples *
  • Using the NetMeeting Data Channel
    • Who Should Use This Tutorial?
    • Limitations
    • Creating a Data Channel
  • Remotely Launching Your Program
    • Who Should Use This Tutorial?
    • Limitations
    • LaunchRemote and the Registry
    • Setting and Getting Information for Remote Applications
    • Launching a Remote Application
  • ILS Extended Attributes
    • Who Should Use This Tutorial?
    • Limitations
    • The Client Side
    • The Server Side
  • Implementing Filters in ILS Queries
    • Who Should Use This Tutorial?
    • Limitations
    • Filter Objects
    • Creating a Filter Object
    • Creating Simple Filters
    • Creating Composite Filters
  • NetMeeting Functionality in Web Pages
    • Using the VBOCX Sample
  • Creating a NetMeeting Call Center
    • Who Should Use This Tutorial?
    • Limitations
    • Creating A Call Center
References *
  • COM Object Reference
    • Conceptual Diagram
    • COM Object, Interface, and Method Listing
    • Conference Manager Object
    • Local System Object
    • Call Object
    • Conference Object
    • Member Object
    • Channel Object
    • Data Channel
    • Audio Channel
    • Video Channel
    • File Transfer Channel
    • File Object
    • Application Sharing Channel
    • Application Object
    • Enumerator Definitions
  • Internet Locator Server Reference
    • ILS Object Conceptual Diagram
    • ILS Object, Interface, and Method Listing
    • General Notes
    • ILS Object
    • User Object
    • Protocol Object
    • Server Object
    • Attributes Object
    • Filter Object
    • Enumerator Object
  • ActiveX Control Reference
    • ActiveX Control Objects, Properties, Methods, and Events Listing
    • Conference Manager Object
    • User Object
    • Conference Object
    • Member Object
    • Channel Object
    • Client Application Object
    • Sharable Application Object
    • Data Transfer Channel
    • File Transfer Channel
  • Installable Codecs Reference
    • ITU Standard Codecs and RTP Payload Handlers
    • Third-Party Codecs
    • Implementation Notes
    • Interfaces Reference
    • Structures Reference
Licensing and Distribution *
Frequently Asked Questions *
  • General Overview
    • How can I have my product/company name listed in the NetMeeting Compatible Products and Services Directory?
    • How is the NetMeeting SDK different from other conferencing platforms?
    • Where can I find information on business use of NetMeeting?
    • What are the bandwidth requirements for NetMeeting?
    • How are NetMeeting 2.1 and TAPI 3.0 related?
    • Is NetMeeting compatible with conferencing servers?
    • How do fire walls affect NetMeeting?
  • Software Development
    • How can I programmatically cancel my call or request to join a conference before it succeeds?
    • How can I programmatically leave a conference in which I am participating?
    • What is the difference between a Conference object (INmConference) and a Call object (INmCall)?
    • How can I programmatically change the application sharing state in the same way that clicking the Collaborate button in NetMeeting does?
    • Why is my data broken into 4K chunks when I use SendData?
    • Is there a limit to the amount of data that can be sent using SendData?
    • How can I launch a copy of my application on a remote computer?
    • How can I create a directory of users in my product?
    • When do I have to use AddRef and Release in NetMeeting?
    • How can I reactivate audio or video in the NMUI sample after I have disabled them?
    • How can I switch audio and video between participants in my meeting?
    • How can I get the conference name for a conference I have joined?
    • How can I add a NetMeeting call link to my Web page?
  • Additional Information
    • Where can I learn more about NetMeeting?
    • Where can I learn more about the NetMeeting SDK?
    • Where can I find more information about the Internet Locator Server (formerly known as the User Location Service)?
    • Are NetMeeting sample applications available?
    • Where can I find more information about programming using COM?
    • Where can I send feedback and questions about the NetMeeting SDK?


 Microsoft NetMeeting SDK


Index

A B C D E F G H I J L M N O P R S T U V

A

Abort (IIlsMain)
Accept (INmCall)
Accepted (INmCallNotify)
AcceptInvite (IConferenceX)
AcceptJoin (IConferenceX)
AddACMFormat (IInstallAudioCodecs)
AddProtocol (IIlsUser)
AddSubFilter (IIlsFilter)
AddVCMFormat (IInstallVideoCodecs)
Advise (IConfAppControlX)
Advise (IConfAppSharingX)
Advise (IConfDataExchangeX)
Advise (IConferenceManagerX)
Advise (IConferenceX)
Advise (IConfFileExchangeX)
AppControlStatusChanged
Applications (IConferenceX)
Applications (IConfMemberX)
Applications (IConfUserX)
AppSharingStatusChanged
Array (IConfDataTransferX)
AUDCAP_INFO
AUDCAP_INFO_LIST

B

BytesTransferred (IConfDataTransferX)
BytesTransferred (IConfFileTransferX)

C

CallConference (INmManager)
CallCreated (INmManagerNotify)
Cancel (IConfFileExchangeX)
Cancel (INmCall)
Cancel (INmFt)
Capabilities (IConferenceX)
ChannelChanged
ChannelChanged (INmConferenceNotify)
ChannelInterfaces (IConferenceX)
Channels (IConferenceX)
Clone (IEnumIlsNames)
Clone (IEnumIlsProtocol)
Clone (IEnumIlsUser)
Clone (IEnumNmCall)
Clone (IEnumNmChannel)
Clone (IEnumNmConference)
Clone (IEnumNmMember)
Clone (IEnumNmSharableApp)
Clone (IIlsUser)
Conference (IConfChannelX)
Conference (IConfMemberX)
ConferenceCapabilities (IConferenceManagerX)
ConferenceCapabilities (IConfMemberX)
ConferenceCapabilities (IConfUserX)
ConferenceCreated
ConferenceCreated (INmManagerNotify)
Conferences (IConferenceManagerX)
Conferences (IConfMemberX)
Conferences (IConfUserX)
CreateAttributes (IIlsMain)
CreateCall (INmManager)
CreateChannel (IConferenceX)
CreateConference (IConferenceManagerX)
CreateConference (INmManager)
CreateDataChannel (INmConference)
CreateFilter (IIlsMain)
CreateInstallCodecs
CreateProtocol (IIlsUser)
CreateServer (IIlsMain)
CreateUser (IConferenceManagerX)
CreateUser (IIlsMain)

D

DataReceived
DataReceived (INmChannelDataNotify)
DataSent
DataSent (INmChannelDataNotify)

E

Eject (INmMember)
EnumAttributes (IIlsAttributes)
EnumCall (INmManager)
EnumChannel (INmConference)
EnumConference (INmManager)
EnumFormats (IInstallAudioCodecs)
EnumFormats (IInstallVideoCodecs)
EnumMember (INmChannel)
EnumMember (INmConference)
EnumProtocols (IIlsUser)
EnumProtocolsResult (IIlsUserNotify)
EnumSharableApp (INmChannelAppShare)
EnumUserNames (IIlsMain)
EnumUserNamesResult (IIlsNotify)
EnumUsers (IIlsMain)
EnumUsersResult (IIlsNotify)
ExcludeMember (IConfChannelX)

F

Failed (INmCallNotify)
FileReceived
FileSent
FreeBuffer (IInstallAudioCodecs)
FreeBuffer (IInstallVideoCodecs)
FtUpdate (INmChannelFtNotify)

G

GetAddr (INmCall)
GetAddr (INmMember)
GetAllExtendedAttributes (IIlsProtocol)
GetAllExtendedAttributes (IIlsUser)
GetAttribute (IIlsAttributes)
GetBytesTransferred (INmFt)
GetChannelCount (INmConference)
GetConference (INmCall)
GetConference (INmChannel)
GetConference (INmMember)
GetCount (IIlsFilter)
GetExtendedAttribute (IIlsProtocol)
GetExtendedAttribute (IIlsUser)
GetGuid (IIlsUser)
GetGuid (INmChannelData)
GetHwnd (INmSharableApp)
GetID (INmConference)
GetID (INmMember)
GetInterface (INmChannel)
GetLaunchInfo (INmSysInfo)
GetMember (INmFt)
GetMemberCount (INmChannel)
GetMemberCount (INmConference)
GetName (INmCall)
GetName (INmConference)
GetName (INmFt)
GetName (INmMember)
GetName (INmSharableApp)
GetNmApp (INmSysInfo)
GetNmch (INmChannel)
GetNmchCaps (INmConference)
GetNmchCaps (INmMember)
GetNmchCaps (INmSysInfo)
GetNmVersion (INmMember)
GetPortNumber (IIlsProtocol)
GetProperty (INmChannelAudio)
GetProperty (INmChannelVideo)
GetProperty (INmSysInfo)
GetProtocol (IIlsUser)
GetProtocolResult (IIlsUserNotify)
GetReceiveFileDir (IConfFileExchangeX)
GetReceiveFileDir (INmChannelFt)
GetShareState (INmMember)
GetSize (INmFt)
GetStandardAttribute (IIlsProtocol)
GetStandardAttribute (IIlsUser)
GetState (IIlsUser)
GetState (INmCall)
GetState (INmChannelAppShare)
GetState (INmChannelAudio)
GetState (INmChannelVideo)
GetState (INmConference)
GetState (INmFt)
GetState (INmSharableApp)
GetSysInfo (INmManager)
GetTopProvider (INmConference)
GetUser (IIlsMain)
GetUserData (INmCall)
GetUserData (INmMember)
GetUserData (INmSysInfo)
GetUserResult (IIlsNotify)
GetVisible (IIlsUser)
GUID (IConfApplicationX)

H

Host (INmConference)

More entries...

Last Updated: November 1, 1997
© 1997 Microsoft Corporation. All rights reserved. Terms of Use.


Index

A B C D E F G H I J L M N O P R S T U V

I

IConfAppControlX::Advise
IConfAppControlX::StartRemoteInstance
IConfAppControlX::Unadvise
IConfApplicationX::GUID
IConfApplicationX::Name
IConfAppSharingX::Advise
IConfAppSharingX::SharableApps
IConfAppSharingX::Unadvise
IConfChannelX::Conference
IConfChannelX::ExcludeMember
IConfChannelX::IncludeMember
IConfChannelX::Interface
IConfChannelX::IsSameAs
IConfChannelX::Members
IConfChannelX::Object
IConfDataExchangeX::Advise
IConfDataExchangeX::SendData
IConfDataExchangeX::Unadvise
IConfDataTransferX::Array
IConfDataTransferX::BytesTransferred
IConfDataTransferX::String
IConferenceManagerX::Advise
IConferenceManagerX::ConferenceCapabilities
IConferenceManagerX::Conferences
IConferenceManagerX::CreateConference
IConferenceManagerX::CreateUser
IConferenceManagerX::Initialize
IConferenceManagerX::NullObject
IConferenceManagerX::RemoteConference
IConferenceManagerX::Unadvise
IConferenceManagerX::Uninitialize
IConferenceManagerX::Users
IConferenceX::AcceptInvite
IConferenceX::AcceptJoin
IConferenceX::Advise
IConferenceX::Applications
IConferenceX::Capabilities
IConferenceX::ChannelInterfaces
IConferenceX::Channels
IConferenceX::CreateChannel
IConferenceX::Invite
IConferenceX::IsSameAs
IConferenceX::Join
IConferenceX::Leave
IConferenceX::Members
IConferenceX::Name
IConferenceX::RejectInvite
IConferenceX::RejectJoin
IConferenceX::State
IConferenceX::Unadvise
IConfFileExchangeX::Advise
IConfFileExchangeX::Cancel
IConfFileExchangeX::GetReceiveFileDir
IConfFileExchangeX::SendFile
IConfFileExchangeX::SetReceiveFileDir
IConfFileExchangeX::Unadvise
IConfFileTransferX::BytesTransferred
IConfFileTransferX::IsSameAs
IConfFileTransferX::Name
IConfFileTransferX::State
IConfFileTransferX::TotalSize
IConfMemberX::Applications
IConfMemberX::Conference
IConfMemberX::ConferenceCapabilities
IConfMemberX::Conferences
IConfMemberX::IsMCU
IConfMemberX::IsSameAs
IConfMemberX::IsSelf
IConfMemberX::Name
IConfMemberX::Type
IConfShareAppX::Name
IConfShareAppX::Share
IConfShareAppX::ShareState
IConfShareAppX::Unshare
IConfUserX::Applications
IConfUserX::ConferenceCapabilities
IConfUserX::Conferences
IConfUserX::IsMCU
IConfUserX::Name
IConfUserX::Type
IEnumIlsNames::Clone
IEnumIlsNames::Next
IEnumIlsNames::Reset
IEnumIlsNames::Skip
IEnumIlsProtocol::Clone
IEnumIlsProtocol::Next
IEnumIlsProtocol::Reset
IEnumIlsProtocol::Skip
IEnumIlsUser::Clone
IEnumIlsUser::Next
IEnumIlsUser::Reset
IEnumIlsUser::Skip
IEnumNmCall::Clone
IEnumNmCall::Next
IEnumNmCall::Reset
IEnumNmCall::Skip
IEnumNmChannel::Clone
IEnumNmChannel::Next
IEnumNmChannel::Reset
IEnumNmChannel::Skip
IEnumNmConference::Clone
IEnumNmConference::Next
IEnumNmConference::Reset
IEnumNmConference::Skip
IEnumNmMember::Clone
IEnumNmMember::Next
IEnumNmMember::Reset
IEnumNmMember::Skip
IEnumNmSharableApp::Clone
IEnumNmSharableApp::Next
IEnumNmSharableApp::Reset
IEnumNmSharableApp::Skip
IIlsAttributes::EnumAttributes
IIlsAttributes::GetAttribute
IIlsAttributes::SetAttribute
IIlsAttributes::SetAttributeName
IIlsFilter::AddSubFilter
IIlsFilter::GetCount
IIlsFilter::RemoveSubFilter
IIlsFilter::SetAttributeValue
IIlsFilter::SetExtendedAttributeName
IIlsFilter::SetStandardAttributeName
IIlsMain::Abort
IIlsMain::CreateAttributes
IIlsMain::CreateFilter
IIlsMain::CreateServer
IIlsMain::CreateUser
IIlsMain::EnumUserNames
IIlsMain::EnumUsers
IIlsMain::GetUser
IIlsMain::Initialize
IIlsMain::StringToFilter
IIlsMain::Uninitialize
IIlsNotify::EnumUserNamesResult
IIlsNotify::EnumUsersResult
IIlsNotify::GetUserResult
IIlsProtocol::GetAllExtendedAttributes
IIlsProtocol::GetExtendedAttribute
IIlsProtocol::GetPortNumber
IIlsProtocol::GetStandardAttribute
IIlsProtocol::IsWritable
IIlsProtocol::RemoveExtendedAttribute
IIlsProtocol::SetExtendedAttribute
IIlsProtocol::SetStandardAttribute
IIlsProtocol::Update
IIlsProtocolNotify::UpdateResult
IIlsServer::SetAuthenticationMethod
IIlsServer::SetBaseDN
IIlsServer::SetCredential
IIlsServer::SetDomain
IIlsServer::SetLogonName
IIlsServer::SetLogonPassword
IIlsServer::SetTimeout
IIlsUser::AddProtocol
IIlsUser::Clone
IIlsUser::CreateProtocol
IIlsUser::EnumProtocols
IIlsUser::GetAllExtendedAttributes
IIlsUser::GetExtendedAttribute
IIlsUser::GetGuid
IIlsUser::GetProtocol
IIlsUser::GetStandardAttribute
IIlsUser::GetState
IIlsUser::GetVisible
IIlsUser::IsWritable
IIlsUser::Register
IIlsUser::RemoveExtendedAttribute
IIlsUser::RemoveProtocol
IIlsUser::SetExtendedAttribute
IIlsUser::SetGuid
IIlsUser::SetStandardAttribute
IIlsUser::SetVisible
IIlsUser::Unregister
IIlsUser::Update
IIlsUserNotify::EnumProtocolsResult
IIlsUserNotify::GetProtocolResult
IIlsUserNotify::ProtocolChangeResult
IIlsUserNotify::RegisterResult
IIlsUserNotify::StateChanged
IIlsUserNotify::UpdateResult
IInstallAudioCodecs::AddACMFormat
IInstallAudioCodecs::EnumFormats
IInstallAudioCodecs::FreeBuffer
IInstallAudioCodecs::RemoveACMFormat
IInstallAudioCodecs::ReorderFormats
IInstallVideoCodecs::AddVCMFormat
IInstallVideoCodecs::EnumFormats
IInstallVideoCodecs::FreeBuffer
IInstallVideoCodecs::RemoveVCMFormat
IInstallVideoCodecs::ReorderFormats
IncludeMember (IConfChannelX)
Initialize (IConferenceManagerX)
Initialize (IIlsMain)
Initialize (INmManager)
INmCall::Accept
INmCall::Cancel
INmCall::GetAddr
INmCall::GetConference
INmCall::GetName
INmCall::GetState
INmCall::GetUserData
INmCall::IsIncoming
INmCall::Reject
INmCallNotify::Accepted
INmCallNotify::Failed
INmCallNotify::NmUI
INmCallNotify::StateChanged
INmChannel::EnumMember
INmChannel::GetConference
INmChannel::GetInterface
INmChannel::GetMemberCount
INmChannel::GetNmch
INmChannel::IsActive
INmChannel::IsSameAs
INmChannel::SetActive
INmChannelAppShare::EnumSharableApp
INmChannelAppShare::GetState
INmChannelAppShare::SetState
INmChannelAppShareNotify::MemberChanged
INmChannelAppShareNotify::NmUI
INmChannelAppShareNotify::StateChanged
INmChannelAudio::GetProperty
INmChannelAudio::GetState
INmChannelAudio::IsIncoming
INmChannelAudio::SetProperty
INmChannelAudioNotify::MemberChanged
INmChannelAudioNotify::NmUI
INmChannelAudioNotify::PropertyChanged
INmChannelAudioNotify::StateChanged
INmChannelData::GetGuid
INmChannelData::SendData
INmChannelDataNotify::DataReceived
INmChannelDataNotify::DataSent
INmChannelDataNotify::MemberChanged
INmChannelDataNotify::NmUI
INmChannelFt::GetReceiveFileDir
INmChannelFt::SendFile
INmChannelFt::SetReceiveFileDir
INmChannelFtNotify::FtUpdate
INmChannelFtNotify::MemberChanged
INmChannelFtNotify::NmUI
INmChannelNotify::MemberChanged
INmChannelNotify::NmUI
INmChannelVideo::GetProperty
INmChannelVideo::GetState
INmChannelVideo::IsIncoming
INmChannelVideo::SetProperty
INmChannelVideoNotify::MemberChanged
INmChannelVideoNotify::NmUI
INmChannelVideoNotify::PropertyChanged
INmChannelVideoNotify::StateChanged
INmConference::CreateDataChannel
INmConference::EnumChannel
INmConference::EnumMember
INmConference::GetChannelCount
INmConference::GetID
INmConference::GetMemberCount
INmConference::GetName
INmConference::GetNmchCaps
INmConference::GetState
INmConference::GetTopProvider
INmConference::Host
INmConference::IsHosting
INmConference::LaunchRemote
INmConference::Leave
INmConferenceNotify::ChannelChanged
INmConferenceNotify::MemberChanged
INmConferenceNotify::NmUI
INmConferenceNotify::StateChanged
INmFt::Cancel
INmFt::GetBytesTransferred
INmFt::GetMember
INmFt::GetName
INmFt::GetSize
INmFt::GetState
INmFt::IsIncoming
INmManager::CallConference
INmManager::CreateCall
INmManager::CreateConference
INmManager::EnumCall
INmManager::EnumConference
INmManager::GetSysInfo
INmManager::Initialize
INmManagerNotify::CallCreated
INmManagerNotify::ConferenceCreated
INmManagerNotify::NmUI
INmMember::Eject
INmMember::GetAddr
INmMember::GetConference
INmMember::GetID
INmMember::GetName
INmMember::GetNmchCaps
INmMember::GetNmVersion
INmMember::GetShareState
INmMember::GetUserData
INmMember::IsMCU
INmMember::IsSelf
INmSharableApp::GetHwnd
INmSharableApp::GetName
INmSharableApp::GetState
INmSharableApp::SetState
INmSysInfo::GetLaunchInfo
INmSysInfo::GetNmApp
INmSysInfo::GetNmchCaps
INmSysInfo::GetProperty
INmSysInfo::GetUserData
INmSysInfo::IsInstalled
INmSysInfo::SetNmApp
INmSysInfo::SetProperty
INmSysInfo::SetUserData
Interface (IConfChannelX)
Invite (IConferenceX)
InvitedToConference
IsActive (INmChannel)
IsHosting (INmConference)
IsIncoming (INmCall)
IsIncoming (INmChannelAudio)
IsIncoming (INmChannelVideo)
IsIncoming (INmFt)
IsInstalled (INmSysInfo)
IsMCU (IConfMemberX)
IsMCU (IConfUserX)
IsMCU (INmMember)
IsSameAs (IConfChannelX)
IsSameAs (IConferenceX)
IsSameAs (IConfFileTransferX)
IsSameAs (IConfMemberX)
IsSameAs (INmChannel)
IsSelf (IConfMemberX)
IsSelf (INmMember)
IsWritable (IIlsProtocol)
IsWritable (IIlsUser)

J

Join (IConferenceX)

More entries...


Index

A B C D E F G H I J L M N O P R S T U V

L

LaunchRemote (INmConference)
Leave (IConferenceX)
Leave (INmConference)

M

MemberChanged
MemberChanged (INmChannelAppShareNotify)
MemberChanged (INmChannelAudioNotify)
MemberChanged (INmChannelDataNotify)
MemberChanged (INmChannelFtNotify)
MemberChanged (INmChannelNotify)
MemberChanged (INmChannelVideoNotify)
MemberChanged (INmConferenceNotify)
Members (IConfChannelX)
Members (IConferenceX)

N

Name (IConfApplicationX)
Name (IConferenceX)
Name (IConfFileTransferX)
Name (IConfMemberX)
Name (IConfShareAppX)
Name (IConfUserX)
Next (IEnumIlsNames)
Next (IEnumIlsProtocol)
Next (IEnumIlsUser)
Next (IEnumNmCall)
Next (IEnumNmChannel)
Next (IEnumNmConference)
Next (IEnumNmMember)
Next (IEnumNmSharableApp)
NMInstallNTDisplayDriver
NmUI (INmCallNotify)
NmUI (INmChannelAppShareNotify)
NmUI (INmChannelAudioNotify)
NmUI (INmChannelDataNotify)
NmUI (INmChannelFtNotify)
NmUI (INmChannelNotify)
NmUI (INmChannelVideoNotify)
NmUI (INmConferenceNotify)
NmUI (INmManagerNotify)
NullObject (IConferenceManagerX)

O

Object (IConfChannelX)

P

PropertyChanged (INmChannelAudioNotify)
PropertyChanged (INmChannelVideoNotify)
ProtocolChangeResult (IIlsUserNotify)

R

Register (IIlsUser)
RegisterResult (IIlsUserNotify)
Reject (INmCall)
RejectInvite (IConferenceX)
RejectJoin (IConferenceX)
RemoteConference (IConferenceManagerX)
RemoveACMFormat (IInstallAudioCodecs)
RemoveExtendedAttribute (IIlsProtocol)
RemoveExtendedAttribute (IIlsUser)
RemoveProtocol (IIlsUser)
RemoveSubFilter (IIlsFilter)
RemoveVCMFormat (IInstallVideoCodecs)
ReorderFormats (IInstallAudioCodecs)
ReorderFormats (IInstallVideoCodecs)
RequestToJoin
Reset (IEnumIlsNames)
Reset (IEnumIlsProtocol)
Reset (IEnumIlsUser)
Reset (IEnumNmCall)
Reset (IEnumNmChannel)
Reset (IEnumNmConference)
Reset (IEnumNmMember)
Reset (IEnumNmSharableApp)

S

SendData (IConfDataExchangeX)
SendData (INmChannelData)
SendFile (IConfFileExchangeX)
SendFile (INmChannelFt)
SetActive (INmChannel)
SetAttribute (IIlsAttributes)
SetAttributeName (IIlsAttributes)
SetAttributeValue (IIlsFilter)
SetAuthenticationMethod (IIlsServer)
SetBaseDN (IIlsServer)
SetCredential (IIlsServer)
SetDomain (IIlsServer)
SetExtendedAttribute (IIlsProtocol)
SetExtendedAttribute (IIlsUser)
SetExtendedAttributeName (IIlsFilter)
SetGuid (IIlsUser)
SetLogonName (IIlsServer)
SetLogonPassword (IIlsServer)
SetNmApp (INmSysInfo)
SetProperty (INmChannelAudio)
SetProperty (INmChannelVideo)
SetProperty (INmSysInfo)
SetReceiveFileDir (IConfFileExchangeX)
SetReceiveFileDir (INmChannelFt)
SetStandardAttribute (IIlsProtocol)
SetStandardAttribute (IIlsUser)
SetStandardAttributeName (IIlsFilter)
SetState (INmChannelAppShare)
SetState (INmSharableApp)
SetTimeout (IIlsServer)
SetUserData (INmSysInfo)
SetVisible (IIlsUser)
SharableApps (IConfAppSharingX)
Share (IConfShareAppX)
ShareState (IConfShareAppX)
Skip (IEnumIlsNames)
Skip (IEnumIlsProtocol)
Skip (IEnumIlsUser)
Skip (IEnumNmCall)
Skip (IEnumNmChannel)
Skip (IEnumNmConference)
Skip (IEnumNmMember)
Skip (IEnumNmSharableApp)
StartRemoteInstance (IConfAppControlX)
State (IConferenceX)
State (IConfFileTransferX)
StateChanged
StateChanged (IIlsUserNotify)
StateChanged (INmCallNotify)
StateChanged (INmChannelAppShareNotify)
StateChanged (INmChannelAudioNotify)
StateChanged (INmChannelVideoNotify)
StateChanged (INmConferenceNotify)
String (IConfDataTransferX)
StringToFilter (IIlsMain)

T

TotalSize (IConfFileTransferX)
Type (IConfMemberX)
Type (IConfUserX)

U

Unadvise (IConfAppControlX)
Unadvise (IConfAppSharingX)
Unadvise (IConfDataExchangeX)
Unadvise (IConferenceManagerX)
Unadvise (IConferenceX)
Unadvise (IConfFileExchangeX)
Uninitialize (IConferenceManagerX)
Uninitialize (IIlsMain)
Unregister (IIlsUser)
Unshare (IConfShareAppX)
Update (IIlsProtocol)
Update (IIlsUser)
UpdateResult (IIlsProtocolNotify)
UpdateResult (IIlsUserNotify)
Users (IConferenceManagerX)

V

VIDCAP_INFO
VIDCAP_INFO_LIST
VIDEO_SIZES


Microsoft NetMeeting Software Developers Kit

Microsoft Home


Microsoft NetMeeting Software Developers Kit

These documents describe the Microsoft® NetMeeting™ API components that enable developers to incorporate conferencing technology into a variety of applications, including productivity applications, custom conferencing applications, Visual Basic® applications, and scripts within HTML pages.

Introduction

What's New

Getting Started

Dependencies

Standards and Interoperability

NetMeeting Architecture

SDK Usage Examples

Tutorials and Samples

References

Licensing and Distribution

Frequently Asked Questions

Best viewed with
IE logo


Introduction

The Microsoft® NetMeeting™ 2.1 Software Developers Kit (SDK) provides application programming interfaces (APIs) that enable authors and developers to integrate conferencing capabilities into other applications using C, C++, or Visual Basic®. For example, developers can extend the functionality of NetMeeting to integrate:

  • A business-card exchange capability.
  • A collaborative x-ray viewing program.
  • Conferencing capabilities into applications using macro-based scripting languages.

The SDK Usage Examples section provides suggestions for exploiting the robust capabilities of the NetMeeting SDK to improve internal business operations, interaction with customers, education, and entertainment.

In addition, the NetMeeting SDK includes an ActiveX™ control for conferencing, which Web site creators can use with ActiveX Scripting solutions (such as JScript™ and Visual Basic® Scripting Edition) to add conferencing functionality directly to their Web sites.

For more information about the NetMeeting SDK, visit the NetMeeting Authors & Developers site.

The NetMeeting Resource Kit, available at the Microsoft NetMeeting Web site, is an invaluable resource for implementing NetMeeting and utilizing the NetMeeting SDK.

The NetMeeting SDK can also be used in a number of ways to open new market opportunities for third-party software developers, solution providers, and Web site professionals. These include:

  • Integrating real-time multipoint data-conferencing capabilities into existing conferencing solutions, such as video conferencing.
  • Developing custom conferencing solutions to enhance service offerings.
  • Integrating conferencing functionality into Web pages.
  • Extending the features of NetMeeting by building a conferencing-aware application that runs on each meeting participant's computer and uses NetMeeting to send and receive data.

The key features of the NetMeeting 2.1 SDK include:

  • A Component Object Model (COM) interface that enables developers to add NetMeeting functionality to their applications, manage calls, replace the NetMeeting User Interface, and write applications that work within a NetMeeting conference.
  • A complete Lightweight Directory Access Protocol (LDAP) client API for accessing all the capabilities of the Internet Locator Server (ILS) directory used by NetMeeting. Application developers can use the client API for NetMeeting applications or for any application in need of the dynamic storage facilities provided by ILS servers.
  • Codec installation for enabling vendors of audio and video codecs to install their products, and for making NetMeeting leverage them in calls.
  • New purpose-specific samples and tutorials that make it simple to learn the ins and outs of programming collaborative applications.
  • Enhanced documentation enabling you to access information quicker and easier.
  • A Frequently Asked Questions section that addresses the issues we've been asked about the most.


What's New for NetMeeting 2.1

This release of the Microsoft® NetMeeting™ Software Developers Kit (SDK) contains the NetMeeting 2.0 APIs. These have not changed, so your applications written using the NetMeeting 2.0 APIs will continue to function as expected.

New features of this SDK include:

  • New and updated sample applications.
  • New tutorials that guide you through the following tasks.
    • Using the data channel.
    • Using extended attributes and filters in an ILS client.
    • Launching programs remotely.
    • Creating a call center.
  • Updated references with more complete information about using the NetMeeting SDK.
  • An updated Frequently Asked Questions section that addresses the issues we've been asked about most.
  • New information about installing and setting up NetMeeting.
  • Background information about the standards on which NetMeeting was developed
  • New examples demonstrating ways to use the SDK.

For information about NetMeeting, including what's new in the NetMeeting 2.1 product, see the Microsoft NetMeeting web site.


Getting Started

The Microsoft® NetMeeting™ SDK contains a vast amount of information that you can use to add conferencing functionality to your application. The following sections guide you through the download and installation procedures.

Downloading the NetMeeting SDK

Installing the NetMeeting SDK

Enabling Application Sharing on Windows NT 4.0

Installing NetMeeting 2.1

Disabling the NetMeeting Wizard

Downloading the NetMeeting SDK

The Microsoft® NetMeeting™ SDK, as well as NetMeeting 2.1, can be downloaded for free from the NetMeeting web site.

For your convenience, the NetMeeting SDK download file is also available through FTP at ftp://ftp.microsoft.com/developr/msdn/netmtg/.

The Microsoft® Internet Client SDK is available for free download at the Internet Client SDK site. If you have already installed the Internet Client SDK, you will find the NetMeeting SDK in the \inetsdk\bin folder. Double-click the Nm21sdk.exe file to install the NetMeeting SDK on your computer.

Up Back to Getting Started

Installing the NetMeeting SDK

To install, or re-install, the NetMeeting SDK, execute the Nm21sdk.exe self-extracting installation program. This .exe was created for Windows NT 4.0 and Windows 95. It will copy the SDK to a directory you specify. It will also place shortcuts to this directory, to the Microsoft NetMeeting 2.1 API documentation, and to the Readme.txt file in your Programs folder on the Start menu.

Note that if you install on Microsoft® Windows NT® 4.0 and you do not have administrator privileges, no items will be added to the Programs folder of the Start pop-up menu.

To use this SDK you will also need the final version of NetMeeting 2.1. This version of NetMeeting is available at Microsoft's NetMeeting home page.

Note Do not install the NetMeeting 1.0 or 1.0a SDK on a machine that has NetMeeting 2.0 or 2.1. If you do, you will be required to re-install NetMeeting 2.1 before you can use it again.

Up Back to Getting Started

Enabling Application Sharing on Windows NT 4.0

By default, application sharing is not enabled on Windows NT. To enable application sharing automatically (without using the NetMeeting user interface) you must have NT 4.0 Service Pack 3 installed and follow the instructions below.

The NMInstallNTDisplayDriver method along with the Setupdd.dll file, downloaded into the \redistrb directory of your NetMeeting SDK folder, can be used to enable application sharing on Windows NT. You should install and use Setupdd.dll only on Windows NT 4.0 with Service Pack 3. Enabling application sharing is not necessary on Windows 95 and will not work on earlier versions of Windows NT.

NMInstallNTDisplayDriver

BOOL DECLSPEC_IMPORT WINAPI NMInstallNTDisplayDriver(
                  HWND hWnd);

Installs the NetMeeting display driver used for Windows NT.

  • Returns one of the following values:
    TRUE | The driver was successfully installed. In this event case, the calling application should prompt the user to restart the system for the changes to take effect.
    FALSE | The driver was not installed successfully. This may result if this version of the operating system does not support this driver or if an error occurs during installation.
hWnd
Handle to the parent window used by setup when displaying dialogs.

This driver requires Windows NT 4.0 Service Pack 3 or later. Therefore, the calling application should ascertain (by using the Windows routine GetVersionEx, for example) the Windows version before calling this function.

NetMeeting must already be installed on the system for this function to work.

This function does not detect whether or not the display driver is already installed and enabled. Therefore, the calling application should confirm the absence of the driver before calling this function.

A reboot is necessary after enabling application sharing. The calling application is responsible for prompting the user to reboot.

Up Back to Getting Started

Installing NetMeeting 2.1

The NetMeeting setup EXE recognizes some command line parameters that developers can use to customize automated setup of NetMeeting within their own application installation procedures. These parameters allow developers to control how the NetMeeting setup program is displayed to the user.

Here are some switches you can use when installing NetMeeting 2.1 as part of your own application:

/Q | Installs without showing any user interface. Bypasses all prompts, error messages, and file extraction animation. Usually used when one setup routine launches another.
/Q:1 | Bypasses all prompts except file extraction animation and error messages.
/Q:A | Assumes the user running the application is an administrator and does not check for administration rights or disk space. Bypasses all prompts and errors.
/Q:U | Bypasses extraction animations, but still checks for disk space and administration rights. Assumes the user is an end user.
/C | Extracts files only; doesn't run the install portion.
/C:"command" | Overrides the install command with an INF or EXE defined by the author.
/N:[eg] | Wextract skips various portions of the installation process.
 | e: Wextract skips the file extraction process.
 | g: The group converter (Grpconv.exe) does not launch.
/R | Forces restart after install.
/T:"path" | Specifies the temporary working folder for decompressed files.
/? | Describes list of possible switches.

The "/C:" switch allows you to specify another INF file that NetMeeting will use during the setup process. The INF file tells NetMeeting what to do during setup and also identifies the keys that should be added to the registry.

Up Back to Getting Started

Disabling the NetMeeting Wizard

When running NetMeeting for the first time, a wizard normally appears to collect data from the new user. To prevent this wizard from running for an application in No-UI mode (NM_INIT_CONTROL), the following set of system properties must be set with the uProp variable in the INmSysInfo::SetProperty method:

NM_SYSPROP_EMAIL_NAME
NM_SYSPROP_SERVER_NAME
NM_SYSPROP_RESOLVE_NAME
NM_SYSPROP_FIRST_NAME
NM_SYSPROP_LAST_NAME
NM_SYSPROP_USER_NAME
NM_SYSPROP_USER_CITY
NM_SYSPROP_USER_COUNTRY
NM_SYSPROP_USER_COMMENTS
NM_SYSPROP_USER_CATEGORY

Up Back to Getting Started


Dependencies

To run an application that uses the Microsoft® NetMeeting™ SDK, NetMeeting 2.0 or later must be installed on your computer.

The NetMeeting SDK runs only on Windows 95 or later and Windows NT 4.0 or later. Do not install this SDK on Windows NT 3.51 or Windows 3.1.

To implement application sharing on Windows NT 4.0, you must install Service Pack 3 and the application sharing driver as described in Enabling Application Sharing on Windows NT 4.0.

The NetMeeting control is implemented as a custom control called the ActiveX™ Conference Control. To use the control in your application, the NetMeeting application must be installed on your computer.


Standards and Interoperability

NetMeeting features support for industry standards set by the International Telecommunications Union (ITU) and the Internet Engineering Task Force (IETF), as well as other standards organizations.

Standards enable products from different vendors to communicate. The broad industry support for the standards used by NetMeeting (over 60 leading vendors have announced products and services that work with and enhance use of NetMeeting) enables you to connect and communicate with products from different vendors just as people using different makes and models of telephones can communicate.

Among the standards NetMeeting supports are the ITU H.323 standard for audio and video conferencing, the ITU T.120 standard for multipoint data conferencing, and the IETF LDAP standard for directory services. Overview information for these standards is provided in the sections below. For those seeking greater detail, links to conferencing standards organizations are also provided.

The H.323 Standard

The T.120 Standard

Lightweight Directory Access Protocol

Additional conferencing standards information

The H.323 Standard

H.323 is an ITU standard that specifies how terminals (PCs), equipment, and services for multimedia communicate over networks that do not provide a guaranteed quality of service (such as the internet). H.323 terminals and equipment can carry real-time video, voice, and data, or any combination of these elements. Products that use H.323 for audio and video let you connect and communicate with other people over the Internet, just as people using different makes and models of telephones can communicate using the telephone.

H.323 is actually a series of standards that define:

  • How calls get set up.
  • The capability negotiation (the process of getting two machines to communicate with each other) framework.
  • How data is transmitted on the wire.
  • Default audio and video codecs (audio and video codecs encode and decode input/output from audio and video sources for communicating between nodes).

For low bandwidth use, the H.323 standard specifies standard codecs for audio (G.723) and for video (H.263) that enable H.323 products to send and receive voice and video images. H.323 also specifies use of the T.120 standard for data conferencing. More than 120 leading companies in the industry publicly announced their intent to support and implement H.323 in their products and services. This broad support establishes H.323 as the leading solution for audio and video conferencing over the Internet.

H.323 Components

The H.323 standard includes the following components:

H.225.0 | This standard defines a layer that formats the transmitted video, audio, data, and control streams for output to the network and retrieves the received video, audio, data, and control streams from the network. H.225.0 uses the packet format specified by IETF RTP and RTCP specifications for logical framing, sequence numbering, and error detection as part of audio and video transmissions. Support for RTP and RTCP enables the receiving node to synchronize the received packets in the proper order so the user hears or sees the information correctly.
H.245 | The H.245 standard provides the call control mechanism that enables H.323-compatible terminals to connect to each other.
H.261 | The H.261 standard specifies the format and algorithm for an alternative, higher bandwidth, video codec used to send or receive video images over network connections.
H.263 | This standard specifies the format and algorithm for the default video codec used to send or receive video over low-bandwidth network connections.
G.711 | The G.711 standard specifies the format and algorithm for an alternative, higher bandwidth, audio codec used to send or receive voice over network connections.
G.723 | Audio codec, for 5.3 and 6.3 Kbps modes.
G.723.1 | This standard specifies the format and algorithm for the default audio codec used to send or receive voice over low-bandwidth network connections.

Up Back to Standards and Interoperability

The T.120 Standard

The ITU T.120 standard is composed of a suite of communication and application layer protocols developed and approved by the international computer and telecommunications industries. These protocols enable developers to create compatible products and services for real-time, multipoint data connections and conferencing. T.120-based applications let many users participate in conferencing sessions over different types of networks and connections. Depending on the type of T.120 product, users can:

  • Make connections.
  • Transmit and receive data.
  • Collaborate using compatible data conferencing features, such as application sharing, conferencing white board, and file transfer.

T.120 Components

T.120 is an umbrella standard that encompasses a series of communication and application standards. The following standards and components make up the T.120 infrastructure:

T.120 | Data protocols for multimedia conferencing which provide an overview of the T.120 series.
T.121 | This standard provides a generic application template (GAT), which specifies a common set of guidelines for building application protocols. To ensure application consistency, T.121 is a required standard for products developed under T.120.
T.122 | The T.122 standard defines the multipoint services that enable one or more participants to send data as part of a conference. These multipoint services are implemented by T.125, which provides the mechanism for transporting the data. Together, the T.122 and T.125 standards make up the T.120 multipoint communication services (MCS).
T.124 | Generic Conference Control (GCC): The definition of the application protocol supporting reservations and basic conference control services for multipoint teleconferences.
T.125 | This standard specifies how data is transmitted within a conference. T.125 defines the private and broadcast channels that transport the data and ensures accurate and efficient communication among multiple users. T.125 implements the multipoint services defined by T.122.
T.126 | Multipoint still image and annotation protocol: Definitions for collaborative data sharing, image sharing, graphic display information, and image exchange in a multipoint conference.
T.127 | This standard defines how files are transferred simultaneously among conference participants. T.127 enables one or more files to be selected and transmitted in compressed or uncompressed form to all or selected participants during a conference.
T.128 | This standard defines how application sharing orders are transmitted.

Up Back to Standards and Interoperability

Lightweight Directory Access Protocol

The Lightweight Directory Access Protocol (LDAP), as its name implies, is a standard method for application clients to query and access information stored on directory servers over TCP/IP connections. Typically, a published directory contains data about people or other entities that users can access. The most common examples of paper-based directories are the yellow and white pages of telephone books, which enable a customer to look up the telephone number for a person or company. An example of an electronic directory is a published e-mail address book, which enables an e-mail user to look up a person's e-mail address and other details, such as office location and internal phone extension.

LDAP is derived from the X.500 global directory and the Directory Access Protocol (DAP), a complex access protocol for performing a wide variety of directory functions. LDAP is a lightweight offspring of DAP, shedding the unnecessary features of client-server access scenarios. The result of the weight loss is LDAP, a protocol that greatly simplifies implementation, reduces software complexity, improves performance, and in the process, encourages wider adoption.

Up Back to Standards and Interoperability

Additional conferencing standards information

The NetMeeting 2.1 Resource Kit provides detailed information about the conferencing standards used by NetMeeting. You can download the resource kit from the Microsoft NetMeeting web site.

Standards Organizations

There are also several organizations in the industry responsible for defining, approving, and communicating standards. Some of these organizations are:

  • International Telecommunications Union. The ITU, headquartered in Geneva, Switzerland, is an international organization through which governments and the private sector coordinate global telecom networks and services. ITU activities include the coordination, development, regulation, and standardization of telecommunications as well as organization of regional and world telecom events.
  • Internet Engineering Task Force. The IETF is the protocol engineering and development arm of the Internet. The IETF is a large, open, international community of network designers, operators, vendors, and researchers concerned with the evolution of the Internet architecture and the smooth operation of the Internet.
  • International Multimedia Telecommunications Consortium Inc. The IMTC is a nonprofit corporation founded to promote the creation and adoption of international standards for multipoint document and video teleconferencing. The IMTC and its members promote a Standards First initiative to guarantee interworking for all aspects of multimedia teleconferencing.

Up Back to Standards and Interoperability


NetMeeting Architecture

Conferencing API

The Microsoft® NetMeeting™ conferencing API, shown in orange in the diagram above, takes advantage of all the functionality provided at lower layers, including, optionally, the NetMeeting user interface.

Up Arrow Back to NetMeeting Architecture chart

Control Layer

The following components, shown in blue in the diagram, tie together the NetMeeting functionality provided by lower layers.

Node Management | Keeps track of conferences and conference participants.
NetMeeting UI | Displays NetMeeting functionality to users.

Up Arrow Back to NetMeeting Architecture chart

Audio/Video Components

The following components, shown in violet in the diagram above, manage the audio and video functionality in NetMeeting.

Call Control | Sets up the audio and video portion of the NetMeeting call using the H.245 standard for call control.
RTP/RTCP | Handles real-time streaming of audio and video over the Internet using the H.255.0 standard.
H.263 Video | Compresses and decompresses video data using a H.263-compliant video codec.
G.723 Audio | Compresses and decompresses audio data using a G.723-compliant audio codec.
Media Stream Engine | Coordinates capture, compression, and transmission of audio and video data. On the receiving side, this component receives, decompresses, and replays audio and video.

Up Arrow Back to NetMeeting Architecture chart

Data Conferencing Components

The following data conferencing components, shown in gold in the diagram above, handle transmission of data between different conference participants. This includes file transfer, application sharing, whiteboard, and chat data, as well as applications written using the NetMeeting SDK's Data Channel.

T.120 data | Sends and receives data between different conference participants using the T.120 protocol for data conferencing.
Built-in data applications | Use the T.120 data component to send and receive information. (These applications include chat, file transfer, and whiteboard.)

Up Arrow Back to NetMeeting Architecture chart

Internet Locator Server

The Internet Locator Server component, shown in teal, communicates with Internet locator servers on the network (LAN or Internet) to get directory listings and find users.

Up Arrow Back to NetMeeting Architecture chart


SDK Usage Examples

The robust set of objects and interfaces available in the NetMeeting SDK will provide endless possibilities for developers to create their own custom applications for communication solutions. The following list provides just a few examples for using the SDK.

Customer Service from a Web page

Add Application Sharing Functionality

Add Audio/Video to an Application

Distance Learning

Help Desk

Multiplayer Game

Customer Service from a Web page

Do you sell products on your Web site? Do you want to enable customers to interact directly with your employees through the Web? The Microsoft® NetMeeting™ SDK provides the tools and information you need to add such functionality to your Web pages. Once implemented, such functionality enables your customers to talk to, see, and share information with customer service representatives directly through your Web pages.

The Web Page Functionality tutorial describes some ways to set up a customer service offering or call center from a Web page.

Up Back to SDK Usage Examples

Add Application Sharing Functionality

You can make it even easier for users to share your application by adding a "Share Me" button to your application's toolbar. Clicking this button will launch NetMeeting and automatically share your application. You can implement this functionality with the NetMeeting UI hidden or visible, depending on your application's needs. Once in the application sharing conference, users can access other NetMeeting functionality as well.

Up Back to SDK Usage Examples

Add Audio/Video to an Application

By using the NetMeeting COM interfaces, you can add audio and video capabilities to your own communication and collaboration applications.

Up Back to SDK Usage Examples

Distance Learning

You can use the NetMeeting COM interfaces to create an application that enables students and teachers to work together in shared documents. The teacher and students can interact in the shared whiteboard, and students can use the chat feature to send questions to the teacher.

You can create your own conferencing-aware application designed to teach students about a specific subject, or you can have the teacher walk students through information in a shared application.

Up Back to SDK Usage Examples

Help Desk

You can use NetMeeting's application sharing functionality to provide a more efficient and effective help desk for your employees. Employees experiencing computer problems will be able to share the appropriate application or system window with the help desk engineer. Instead of having to explain the problem, employees can show the engineer exactly what is wrong on their computers. The help desk engineer then has two options:

  • Talk the user through the solution and watch as instructions are implemented.
  • Take control of the user's system and fix the problem directly.

Routing calls to help desk engineers can be accomplished in one of two ways:

  • The employee places a phone call to the help desk engineer. Once connected to an engineer, the engineer makes the application sharing call to the employee or instructs the employee how to make the application sharing call.
  • Set up a NetMeeting call center to answer incoming calls and route them to a help desk engineer.

The Call Center tutorial provides helpful information on setting up a call center.

Up Back to SDK Usage Examples

Multiplayer Game

You can use the NetMeeting SDK to send data between players in a multiplayer game. For example, you can write a bridge program for NetMeeting users and then use NetMeeting's data channel to send information about each player's moves. Users of your application can use NetMeeting's chat program and audio features to communicate while playing the game.

Up Back to SDK Usage Examples


Tutorials and Samples

NetMeeting delivers an open, extensible platform for real-time communications, offering audio, video, and data conferencing functionality. Several tutorials and sample applications that demonstrate some ways to use the NetMeeting SDK are supplied here.

Sample applications can be found in the samples folder of your Nm21sdk folder. The Samples.txt file, also in the Nm21sdk folder, provides information to aid your usage of the samples. To build the samples from Visual C++®, open the project makefile (sample.mak) as a Microsoft VC++ project, and build as usual. The NetMeeting SDK directories must be added to your VC++ environment (select Options from the Tools menu and click the Directories tab).

Using the NetMeeting Data Channel

Remotely Launching Your Program

ILS Extended Attributes

Implementing Filters in ILS Queries

NetMeeting Functionality in Web Pages

Creating a NetMeeting Call Center

Using the NetMeeting Data Channel

The Microsoft® NetMeeting™ COM interface enables programmers to design feature-rich collaborative software. Using the NetMeeting COM interface, developers can create applications that let users work together over local or remote networks. Local instances of the application, running on each person's computer, can communicate with each other using the NetMeeting data channel.

This tutorial demonstrates how to use the NetMeeting data channel, using the Chat sample application (included in the NetMeeting Software Developers Kit) as a working example.

The code in this tutorial has been simplified to highlight the important parts of the Chat application. For more details, see the Chat sample application included in the samples folder of your NetMeeting SDK directory.

Who Should Use This Tutorial?

Limitations

Creating a Data Channel

Up Back to list of Tutorials

Who Should Use This Tutorial?

This tutorial is for developers who want to write a "conferencing-aware application" that uses the NetMeeting data channel to send and receive information.

This tutorial assumes that the reader is familiar with the Microsoft Component Object Model (COM). For more information on COM, see Inside OLE 2 by Kraig Brockschmidt.

Up Back to list of Data Channel topics

Limitations

Once you have written an application that uses the NetMeeting data channel, you may want to ensure that your application is running on each conference member's computer. A separate tutorial, Remotely Launching Your Program, describes how to do this.

Up Back to list of Data Channel topics

Creating a Data Channel

Use the following steps to create a data channel:

  1. Obtain and Initialize a Pointer to an INmManager Object
  2. Obtain a Pointer to an INmConference Object
  3. Create an INmChannelData Interface in the INmConference Object
  4. Create Code to Send and Receive Application-Specific Data

Up Back to list of Data Channel topics

Obtain and Initialize a Pointer to an INmManager Object

The INmManager object is at the top of the NetMeeting COM object hierarchy. Any application that uses the NetMeeting COM object should have code that obtains a pointer to an INmManager object. This pointer enables the program to create its own calls and conferences, to detect the properties of the local system, and many other useful tasks. Once you obtain a pointer to an INmManager object, connect a notification sink to the pointer. This causes you to be notified of the presence of INmConferences and INmCalls. The final step is to initialize the NetMeeting system. Initializing will launch the NetMeeting application.

Note It is important to connect a notification sink to your INmManager object before initializing the NetMeeting application. Reversing the order of these steps may cause you to miss important notifications.

In the following sample code, the INmManager pointer is initialized with data capabilities (NMCH_DATA) only, because this application is not interested in receiving notifications about other types of traffic (such as audio or video).

HRESULT InitManager( void )
{
    HRESULT hr;
    hr = CoCreateInstance(CLSID_NmManager,
                          NULL,
                          CLSCTX_INPROC_SERVER,
                          IID_INmManager,
                          (void **)&g_pNmManager);

    if( SUCCEEDED( hr ) ) {
        g_pManagerNotify = new CManagerNotify();

        if( NULL != g_pManagerNotify ) {
            hr = g_pManagerNotify->Connect( g_pNmManager );

            if( SUCCEEDED( hr ) ) {
                ULONG  uchCaps =  NMCH_DATA;
                ULONG  uOptions =  NM_INIT_NORMAL;
                hr = g_pNmManager->Initialize( &uOptions,&uchCaps )
            }
        }
    }
    return( hr );
}

Up Back to Creating a Data Channel

Obtain a Pointer to an INmConference Object

The INmConference object enables you to access INmChannels and INmMembers. An active conference is one in which there are two or more computers (each represented by an INmMember pointer), sending and receiving audio, video, files, or data. The INmManager object is notified of existing conferences through its notification sink. When an INmManager pointer is first initialized, or each time a conference is created, the NetMeeting COM object calls your INmManagerNotify::ConferenceCreated method. A conference can be created through the NetMeeting user interface (UI) or through calls to the NetMeeting COM API.

The following code is an example of the INmManagerNotify::ConferenceCreated method you will have to write. As with the preceding function, you will create a pointer to the Conference object, and then connect a notification object to the pointer. This will enable you to receive notifications about the conference.

INmConference *g_pConference = NULL;

HRESULT STDMETHODCALLTYPE
CManagerNotify::ConferenceCreated( INmConference *pConference )
{
    HRESULT hr = E_FAIL;

    pConference->AddRef();
    g_pConference = pConference;
    g_pConferenceNotify = new CConferenceNotify();

    if( NULL != g_pConferenceNotify ) {
        hr = g_pConferenceNotify->Connect( g_pConference );
    }
    return( hr );
}

Up Back to Creating a Data Channel

Create an INmChannelData Interface in the INmConference Object

INmChannelData is the interface through which application-specific data is transmitted and received. A data channel is created with a GUID (globally unique identifier). Programs can use a data channel to transmit information only if both members have created a data channel using the same GUID.

The following code creates a data channel for a program that can communicate with the NetMeeting Chat application. It first creates a data channel, then connects the channel to a notification sink so that notification about the channel can be received.

// Local Application Guid :
// {D29A8C50-774F-11d0-8B1D-00A0C91BC90E}
const GUID g_guidApp =
{ 0xd29a8c51, 0x774f, 0x11d0,
           { 0x8b, 0x1d, 0x0, 0xa0, 0xc9, 0x1b, 0xc9, 0xe} };

INmChannelData *g_pChannelData = NULL;

HRESULT CreateChatChannel(void)
{
    HRESULT hr;
    hr = g_pConference->CreateDataChannel(
                               &g_pChannelData, g_guidApp);

    if (S_OK == hr) {
        g_pDataChanNotify = new CChannelDataNotify();

        if( NULL != g_pDataChanNotify ) {
            hr = g_pDataChanNotify->Connect(g_pChannelData);
        }
    }
    return hr;
}

For more information about creating and using GUIDs, see Inside OLE, Second Edition.

Up Back to Creating a Data Channel

Create Code to Send and Receive Application-Specific Data

Sending data is accomplished through INmChannelData::SendData. Data is received by your INmChannelDataNotify::DataReceived method.

The INmChannelDataNotify::DataReceived method is called by the NetMeeting COM object whenever data is received.

The following sample code sends and receives normal, null-terminated text strings.

HRESULT SendText(LPTSTR psz)
{
    HRESULT hr;
    ULONG cb = lstrlen(psz);

    if ((0 == cb) || (NULL == g_pChannelData)
                  || (S_OK != g_pChannelData->IsActive()) {
        return S_FALSE; // data channel not available
    }

    INmMember *pMember = GetSelectedMember();
    cb++; // include final null
    hr = g_pChannelData->SendData(pMember, cb, psz, 0);
    return hr;
}

HRESULT STDMETHODCALLTYPE CChannelDataNotify::DataReceived(INmMember *pMember, ULONG uSize, LPBYTE pb, ULONG dwFlags)
{
    LPTSTR psz;
    psz = (LPTSTR) pb;
    DisplayMsg(psz, pMember, dwFlags);
    return S_OK;
}

Up Back to Creating a Data Channel

Up Back to list of Data Channel topics

Remotely Launching Your Program

You've written an application that uses the Microsoft® NetMeeting™ data channel to send information between the people in a conference. How do you ensure that your application is running on everyone's computer? This tutorial shows you!

The NetMeeting COM interface enables programmers to quickly and easily design feature-rich, collaborative software. Using the NetMeeting COM interface, developers can create applications that enable users to work together over local or remote networks. To support this, your software may need to ensure that your application is running on another computer, or to cause another computer to launch a copy of your application. This tutorial provides a tour through the hierarchy of the NetMeeting COM interface and demonstrates how to launch copies of your programs on a remote computer. This is accomplished with a call to INmConference::LaunchRemote and several other important methods.

Who Should Use This Tutorial?

Limitations

LaunchRemote and the Registry

Setting and Getting Information for Remote Applications

Launching a Remote Application

Up Back to list of Tutorials

Who Should Use This Tutorial?

This tutorial is for developers who want to learn how to launch applications on a remote computer.

This tutorial assumes that the developer has the ability to create and manage conferences and calls.

This tutorial assumes that the reader is familiar with the Microsoft Component Object Model (COM). For more information on COM, see Inside OLE 2 by Kraig Brockschmidt.

Up Back to list of Remote Launch topics

Limitations

To launch an application on a remote computer:

  • The application must be registered in the registry of the remote computer.
  • The application must be present on the remote computer.
  • Both the local and remote computer must be using NetMeeting or the NetMeeting COM object.
  • Both systems must be in a conference together.

Up Back to list of Remote Launch topics

LaunchRemote and the Registry

Registry keys for programs that can be remotely launched with NetMeeting are stored in:

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Conferencing\Applications

Under the Applications key is one key for each program which can be launched remotely . This folder must be named with your application's globally unique identifier (GUID). The keys are described in the following section, Setting and Getting Information for Remote Applications.

The following example shows the registry keys for the NetMeeting Chat program.

HKEY_LOCAL_MACHINE\
  SOFTWARE\
    Microsoft\
      Conferencing\
        Applications\
          {340F3A60-7067-11D0-A041-444553540000}
            Directory    "C:\Program Files\NetMeeting"
            Path         "C:\Program Files\NetMeeting\cb32.exe"

Up Back to list of Remote Launch topics

Setting and Getting Information for Remote Applications

Applications that can be launched remotely can be entered into the registry in any manner. However, the best and most convenient way to register an application is with the INmSysInfo::SetNmApp method. SetNmApp takes four parameters, which are used to register the application with the system. Its complement function, INmSysInfo::GetNmApp, passes the first parameter as an "in" parameter, and the last three as "out" parameters to be filled in by the INmSysInfo interface. Using SetNmApp is preferred to modifying the registry directly because it will continue to work even if the registry keys are moved in a future release of NetMeeting.

The following table describes the parameters you need to provide.

Parameter | Usage/Meaning | Registry key
REFGUID rguid | This GUID identifies the application and is needed when calling LaunchRemote. Each application to be launched remotely should have one GUID that can be used to register with any computer. For more information about creating and using GUIDs, see Inside OLE, Second Edition. | In the registry, the value of rguid is the folder name of the entry for this application.
BSTR bstrApplication | The full path and file name of the module that will be started when there is an incoming request to launch the application associated with the rguid parameter. If the bstrApplication parameter is NULL, the module name must be the first white-space-delimited token in the bstrCommandLine string. | This parameter is reflected in the registry as the Path registry key under the rguid folder.
BSTR bstrCommandLine | Specifies the command line to execute. If this parameter is NULL, the function uses the string pointed to by bstrApplication as the command line. | This parameter is reflected in the registry as the CmdLine registry key under the rguid folder.
BSTR bstrDirectory | Specifies the current drive and directory for the child process. The string must be a full path and file name that includes a drive letter. If this parameter is NULL, the new process is created with the same current drive and directory as the calling process. | This parameter is reflected in the registry as the Directory registry key under the rguid folder.

Code Sample

The following code sample demonstrates how to use the SetNmApp method to add your application's keys to the registry. It also demonstrates the use of the GetNmApp method to read these values.

HRESULT hr;
INmManager *pManager;
INmSysInfo *pSysInfo;

// Add code to retrieve and initialize pManager
// and pSysInfo

BSTR bstrApp, bstrCom, bstrDir;
LPTSTR_to_BSTR( &bstrApp, "C:\RemoteDemo\Demo.exe" );
LPTSTR_to_BSTR( &bstrCom, "C:\RemoteDemo\Demo Arg1 Arg2" );
LPTSTR_to_BSTR( &bstrDir, "C:\RemoteDemo" );

hr = pSysInfo->SetNmApp(
        IID_APPGUID, // a predefined GUID for this App
        bstrApp,     // Full path and file name
        bstrCom,     // Path and file with command-line args
        bstrDir );   // The working directory to use

if( SUCCEEDED( hr ) ) {
    MessageBox( NULL,
               "We set this app as remote launchable",
               NULL,
               MB_OK );
} else {
    MessageBox( NULL,
               "We did not set this app as launchable",
               NULL,
               MB_OK );
}

SysFreeString( bstrApp );
SysFreeString( bstrCom );
SysFreeString( bstrDir );

hr = pSysInfo->GetNmApp(
        IID_APPGUID, // GUID for the app we want to know about
        &bstrApp,    // the three BSTR parameters will
                     // be filled with info
        &bstrCom,    // retrieved from the registry
        &bstrDir );

if( SUCCEEDED( hr ) ) {
    // do something with the BSTR parameters that have been filled
}

Up Back to list of Remote Launch topics

Launching a Remote Application

Applications are launched remotely through a call to INmConference::LaunchRemote. LaunchRemote can be used to start an application for a specific member of a conference or for all members of the conference.

LaunchRemote uses an application GUID to uniquely identify which application to launch. The application must already be properly registered in the registry of the remote computer, as described in the preceding section. Because one call to LaunchRemote may send out the same GUID to many computers, it is important that you register your application with the same GUID on every computer.

The following is a more detailed description of the required parameters:

REFGUID rguid
rguid is the GUID in the registry associated with the application being launched.
INmMember *pMember
pMember is a pointer to the member on whose computer the application should be launched. Using a NULL pMember instructs NetMeeting to start the application on every conference member's computer.

LaunchRemote returns an HRESULT that indicates whether or not the request to launch was successfully processed. It does not guarantee the remote instance of the application was started.

Code Sample

The following code sample demonstrates how to use LaunchRemote to launch your application on remote computers.

HRESULT hr;
INmConference *pConf;
IEnumNmMember *pEnum;
BOOL fLaunchOnEverybody;

    // Add code to create a conference with members in pConf
    // ...

if( fLaunchOnEverybody ) {

    // Call LaunchRemote on all members of a conference
    hr = pConf->LaunchRemote(
               IID_APPGUID, // GUID for the app to be launched
               NULL );      // call everyone in conference
} else {

    // Call particular members
    hr = pConf->EnumMember( &pEnum );

    if( SUCCEDED( hr ) ) {
        INmMember *pMem;
        ULONG uFetched;

        while( SUCCEEDED( pEnum->Next( 1, &pMem, &uFetched ) {

            if( IWantToLaunchOn( pMem ) ) {
                hr = LaunchRemote( IID_APPGUID,pMem );

                if( FAILED( hr ) ) {
                    // There was a problem with the launch request
                }
            }
        }
    }
    // Could not enumerate members
}

Up Back to list of Remote Launch topics

ILS Extended Attributes

The Microsoft® Internet Locator Server (ILS) enables users of a collaborative software program (a game or conferencing package, for example) to locate other users running the same or compatible software and connect to them. To appear in a list of users, each person must log on to the ILS. The ILS tracks each logged-on person as a User object. Each User object has several standard attributes, including first name, last name, e-mail name, and country. In addition, an application can create extended attributes for its users and perform queries on these attributes. This tutorial demonstrates how to create and retrieve these extended attributes.

Who Should Use This Tutorial?

Limitations

The Client Side

The Server Side

Up Back to list of Tutorials

Who Should Use This Tutorial?

This tutorial is for developers and Web page authors who want to add extended attributes to ILS User objects and perform searches based on their custom extended attributes.

There are two ways to set/get extended attributes for a user:

  • Create the user on the client through the ILS APIs included in the NetMeeting™ SDK.
  • Create the user and attributes through server-side objects included in Microsoft ILS Server 1.0.

This tutorial assumes that the reader is familiar with the Microsoft Component Object Model (COM). For more information on COM, see Inside OLE 2 by Kraig Brockschmidt.

Up Back to list of Extended Attributes topics

Limitations

With ILS Server 1.0, all extended attribute names must be numerical text strings of type BSTR. This means you cannot create an attribute named "Player's Real Name." Instead, you must create a numbered attribute (for example, 605 or 574). Extended attributes should have numbers higher than 400. The table in the following section enumerates attribute names currently used by NetMeeting.

Extended attributes are application specific, so AppFoo's attribute named 605 will not collide with AppBar's attribute named 605. For this reason, all searches based on extended attributes must include the application identifier.

NetMeeting uses the application identifier "ms-netmeeting". If your application uses this application identifier, you must choose extended attributes that do not collide with those used by NetMeeting.

Up Back to list of Extended Attributes topics

The Client Side

NetMeeting uses extended attributes to indicate that an ILS user is in a call, whether or not the user has audio/video capabilities, and the self-declared "category" of user. The NetMeeting user interface also supports searching for users based on these attributes.

  • Extended Attributes Used by NetMeeting 2.1
  • Setting Attributes
  • Retrieving Attributes

Up Back to list of Extended Attributes topics

Extended Attributes Used by NetMeeting 2.1

The following extended attributes are used by NetMeeting.

Attribute
"name" 		Description Possible values
400 | In-call indicator | "0","1"
501 | Ability to send audio | "0","1"
503 | Ability to send video | "0","1"
600 User category "1" = Personal
"2" = Business
"4" = Adult

Up Back to list of Client Side topics

Setting Attributes

Extended attributes are set through the IIlsUser::SetExtendedAttribute method. This method takes two parameters—the name of the extended attribute and the value. Both are of type BSTR.

ILS treats the attribute names as a MAPI property tag and uses the PROP_TAG macro to encode the name before setting the attribute. You must perform the same encoding when retrieving a NetMeeting extended attribute so the names will match.

For example, to set a user's status to be "currently in a call", use the following:

DWORD dwAtt = PROP_TAG(PT_STRING8, 400);
wsprintf(szName, TEXT("%lu"), dwAtt);

LPTSTR_to_BSTR( szName, bstrName);
LPTSTR_to_BSTR( "1", bstrValue); // set user to be in a call

IIlsUser::SetExtendedAttribute (bstrName, bstrValue);
IIlsUser::Update()

Note The implementation of the LPTSTR_to_BSTR macro has been left as an exercise for the reader.

Up Back to list of Client Side topics

Retrieving Attributes

Calling IIlsUser::GetExtendedAttribute or IIlsUser::GetAllExtendedAttributes does not trigger a server query. All the desired user attribute names must be specified when the user object is obtained from the server. Subsequent calls to GetExtendedAttribute or GetAllExtendedAttributes will provide you with the attribute values.

To retrieve a user object with extended attributes, you must create an Attribute object with the proper names and pass this object to the IIlsMain::GetUser or IIlsMain::EnumUsers method as shown in the following code:

LPTSTR_to_BSTR(&bstrEmpty, "");

// in a call
wsprintf(szProperty, TEXT("%lu"), PROP_TAG(PT_STRING8, 400));

LPTSTR_to_BSTR(&bstrName, szProperty);
hr = pAttrib->SetAttribute(bstrName, bstrEmpty);

// user type
wsprintf(szProperty, TEXT("%lu"), PROP_TAG(PT_STRING8, 600));

LPTSTR_to_BSTR(&bstrName, szProperty);
hr = pAttrib->SetAttribute(bstrName, bstrEmpty);

// Now that the attributes object is configured,
// get the user objects
hr = pIls->EnumUsers (pServer, pFilter, pAttrib, NULL, &uReqID);

After the User object with the specified extended attributes is retrieved from the server, getting the value for just one attribute is easily done by calling IIlsUser::GetExtendedAttribute, as shown in the following code:

DWORD dwAtt = PROP_TAG(PT_STRING8, 501);
wsprintf(szName, TEXT("%lu"), dwAtt);
LPTSTR_to_BSTR( szName, bstrName);
pUser->GetExtendedAttribute (bstrName, &bstrValue);

As previously stated, the User object must have been retrieved from the server with this attribute name specified.

Multiple attribute values can be returned by creating an Attribute object with the desired names and calling IIlsUser::GetAllExtendedAttributes. When the call to GetAllExtendedAttributes returns, the Attribute object will contain the correct values for the named attributes. Again, the User object should have been retrieved from the server with the extended attributes specified.

LPTSTR_to_BSTR(&bstrEmpty, "");

// in a call
wsprintf(szProperty, TEXT("%lu"), PROP_TAG(PT_STRING8, 400));

LPTSTR_to_BSTR(&bstrName, szProperty);
hr = pAttrib->SetAttribute(bstrName, bstrEmpty);

// user type
wsprintf(szProperty, TEXT("%lu"), PROP_TAG(PT_STRING8, 600));

LPTSTR_to_BSTR(&bstrName, szProperty);
hr = pAttrib->SetAttribute(bstrName, bstrEmpty);

//... set up other attributes here...
hr = pUser->GetAllExtendedAttributes(&pAttrib);

Up Back to list of Client Side topics

Up Back to list of Extended Attributes topics

The Server Side

This tutorial addresses how to author ILS-enabled ASP (Active Server Page) pages for use with applications developed using the ILS interfaces provided in the NetMeeting 2.1 SDK. You can create users and query users on the server using ASP objects. For more information and a general overview, see the Microsoft Active Server Pages Web site.

Normally, to access extended attributes using the ASP pages, a Web author can specify the attribute by querying the attribute named "ilstNNNN", where NNNN is the attribute number. However, due to a known problem with ILS Server 1.0, if you want to access an extended attribute that your application has set through the ILS API, you will need to add 0x8000 (32768 decimal) to the attribute number and then prefix it with the string "ilst." For example, to access an attribute named 601, you should refer to the attribute as "ilst33369" in the ASP code. This pertains only to cases where you are using ASP to access extended attributes that were created through the ILS client API. If you are both creating and retrieving the attributes through ASP, you do not need to perform this manipulation.

The following code assumes that an ILS Server object called "ils" has been created according to the instructions in the ILS documentation, and a User object called "testuser" already exists.

' Define the NM extended attribute names here
strAudio = "ilst33269" 		' 501
strVideo = "ilst33271" 		' 503
strIncall = "ilst33168"		' 400
strUserType = "ilst33368"		' 600

' Set the extended attribute values
UserType = 2     ' Business user
Audio = 1        ' Audio capable
InCall = 0       ' Not currently in a call
Video = 1        ' Video capable
App = "ms-netmeeting"    ' App name

' Build the string of values to modify for the application.
' modop=0 because extended attributes are application specific.
NMInfo = "cna=testuser" & _
    "&modop=0" & _
    "&obj=rtperson" & _
    "&appid=" & App & _
    "&appmime=text/iuls" & _
    "&protid=h323" & _
    "&protmime=text/h323" & _
    "&" & strVideo & "=" & Video & _
    "&" & strIncall & "=" & Incall & _
    "&" & strAudio & "=" & Audio & _
    "&" & strUserType & "=" & UserType

' The actual call to modify the user
modifyperson = ils.modify(NMInfo)

Retrieving users based on an extended attribute is fairly easy. Simply search for all user IDs where the specified attribute has the correct value. To find all users on the ILS who list themselves as business users, use the following query:

' Build the string to specify the search criteria.
fndstr = "obj=rtperson" & "&maxreq=0" & _
    "&appid=" & App & "&cna=*" & _
    "&" & strUserType & "=" & UserType

' The actual call to find the users
ils.find(fndstr)

Up Back to list of Extended Attributes topics

Implementing Filters in ILS Queries

As the popularity and usage of ILS servers increases, it will become even more important to limit the amount of information returned from an ILS server query. The Microsoft® Internet Locator Server (ILS) COM interfaces support the use of filters to restrict the amount of data returned from such a query. This tutorial demonstrates the procedure for constructing a custom filter that will allow your application to quickly locate a particular subset of users on the server.

Who Should Use This Tutorial?

Limitations

Filter Objects

Creating a Filter Object

Creating Simple Filters

Creating Composite Filters

Up Back to list of Tutorials

Who Should Use This Tutorial?

This tutorial is for developers who wish to define ILS query filter strings in order to target a particular user or group of users on a server. Filters can also be applied to protocols belonging to a given user.

Before referencing this tutorial, developers should read the ILS Extended Attributes tutorial.

This tutorial assumes that the reader is familiar with the Microsoft® Component Object Model (COM). For more information on COM, see Inside OLE 2 by Kraig Brockschmidt.

Up Back to list of Implementing Filters topics

Limitations

Both standard and extended attributes can be used in filtering. Attributes must be referenced by their index value—not by actual text names (see the ILS Extended Attributes tutorial). Standard attribute indices can be found in the ILS_STDATTR_* definitions in the Ils.idl file. Extended attribute indices must be defined by the user.

All filter attribute values can use the wildcard character, * , to indicate they should match any string. However, ILS server version 1.0 does not support substring matching. Versions beyond 1.0 allow you to search for partial strings. For example, using a filter created from the string "($1=*)&($5=woo*)" will return all identifiers for users whose last names begin with "woo".

For versions 1.x of the ILS server, the only filter operations supported for composite filters is AND. The rest of the composite filter operations will be discussed in this document for future reference.

Up Back to list of Implementing Filters topics

Filter Objects

A filter is either a simple filter or a composite filter. A simple filter is one that directly relates an attribute name and its target attribute value. A composite filter consists of either two or more simple filters or other composite filters.

For example, the following filter pseudo-code will find all the people who are living in Redmond, WA, and running NetMeeting or any other H323-based application. Also, these people will have the last name 'Doe' but not have the first name 'John'. In this example, composite filter A consists of four subfilters: B, C, F, and H.

Composite filter A (AND)
{
    Simple filter B (lastname=Doe)
    Composite filter C (OR)
    {
        Simple filter D (appname=ms-netmeeting)
        Simple filter E (protid=h323)
    }
    Composite filter F (NOT)
    {
        Simple filter G (firstname=John)
    }
    Simple filter H (city=Redmond,WA)
}

The filter representation is based on LDAP filter design. However, the ILS filter interface cannot simply accept an LDAP filter string. There are two reasons:

  1. The application does not know the names of predefined attributes in the user objects, application objects, and protocol objects.
  2. The application does not have the knowledge of the (client and/or server) representation of non-clear-text attribute values.

The corresponding LDAP filter string of the preceding filter pseudo-code will look like:

(&(userid=*)(&(lastname=Doe)
(|(appid=ms-netmeeting)(protid=h323))
(!(firstname=John))(city=Redmond,WA)))

Up Back to list of Implementing Filters topics

Creating a Filter Object

There are two ways to create a filter object:

  • Construct the filter one piece at a time using the IIlsMain::CreateFilter API.
  • Construct a string representing the filter and convert it to a filter object using IIlsMain::StringToFilter.

The IIlsMain::CreateFilter is prototyped as follows:

HRESULT IIlsMain::CreateFilter(
                   [in] ILS_FILTER_TYPE FilterType;
                   [in] ILS_FILTER_OP FilterOp;
                   [out] IIlsFilter **ppFilter);

The IIlsMain::StringToFilter is prototyped as follows:

HRESULT IIlsMain::StringToFilter(
                   [in] BSTR bstrFilterString,
                   [out] IIlsFilter **ppFilter);

This method takes a regular expression filter string and converts it to a filter object (either composite or simple). For the filter in the previous example, the regular expression would look like:

$1=* & $5=Doe & ($10=ms-netmeeting | $13=h323) & $4!=John & $6=Redmond, WA

The application can also add parentheses around relations for clarity, such as:

($1=*)&(($5=Doe) & (($10=ms-netmeeting) | ($13=h323)) & ($4!=John) & ($6=Redmond, WA))

In this example, $1 indicates the user identifier attribute, $5 is last name, $10 is application identifier, $13 is protocol identifier, $4 is first name, and $6 is city name. The standard attributes are indexed because the application does not know the actual attribute names in the server. All the indices are defined as type ILS_STD_ATTR_NAME. Values of standard attributes are defined in the Ils.idl file and are also listed in the IIlsUser::SetStandardAttribute method description.

All search strings must include ($1="pattern") to inform the server we are interested in receiving user information. Most filters will use a pattern of ($1=*) to return all users whose attributes match the remainder of the filter string.

Up Back to list of Implementing Filters topics

Creating Simple Filters

The following methods are used to set the attributes of a simple filter once it has been created. All simple filters are comprised of name-value pairs, and both must be set for every simple filter.

HRESULT IIlsFilter::SetStandardAttributeName(
                     [in] ILS_STD_ATTR_NAME usrStdAttr);

SetStandardAttributeName sets a standard attribute name. The names are ILS_STD_ATTR_NAME indices.

HRESULT IIlsFilter::SetExtendedAttributeName(
                     [in] BSTR bstrAnyAttrname);

SetExtendedAttributeName sets an arbitrary attribute name. This must also be a numerical index. See the ILS Extended Attributes tutorial for more information.

HRESULT IIlsFilter::SetAttributeValue(
                     [in] BSTR bstrAttrValue);

SetAttributeValue sets a target attribute value. All values are of type BSTR.

The following code demonstrates how to create a simple filter and use it to locate users with the last name "Johnson".

// Create the simple filter object.
hr = CreateFilter(ILS_FITLERTYPE_SIMPLE, ILS_FILTEROP_EQUAL, &pFilter);
if(SUCCEEDED(hr)
{
    // Set the filter name.
    hr = pFilter->SetStandardAttributeName(ILS_STDATTR_LAST_NAME);

    if(SUCCEEDED(hr)
    {
        // Set the filter value.
        LPTSTR_to_BSTR(&bstrLastName, "Johnson");
        hr=pFilter->SetStandardAttributeValue( bstrLastName );
        ...

        // Use the filter we have created to enumerate users.
        hr = EnumUsers(pServer, pFilter, NULL, NULL, &uReqID);
        ...
    }
}

Up Back to list of Implementing Filters topics

Creating Composite Filters

The following methods are used in creating composite filters.

HRESULT IIlsFilter::AddSubFilter (
                     [in] IIlsFilter *pFilter );

AddSubFilter appends a filter to the list of subfilters in a composite filter. The order of subfilters is not important.

HRESULT IIlsFilter::RemoveSubFilter (
                     [in] IIlsFilter *pFilter );

RemoveSubFilter removes the specified filter from the list of subfilters in a composite filter.

HRESULT IIlsFilter::GetCount (
                     [out] ULONG *pcElements );

GetCount counts the number of subfilters in a given composite filter.

The following code sample creates a composite filter that can be used to search for an ILS user named "Joe Johnson".

// Create the first simple filter object.
hr = CreateFilter(
           ILS_FILTERTYPE_SIMPLE,
           ILS_FILTEROP_EQUAL,
           &pFilterOne);

if(SUCCEEDED(hr))
{
    // Set the filter name.
    hr = pFilterOne->SetStandardAttributeName(
                        ILS_STDATTR_LAST_NAME);
    if(SUCCEEDED(hr))
    {
        // Set the filter value.
        LPTSTR_to_BSTR(&bstrLastName, "Johnson");
        hr=pFilterOne->SetStandardAttributeValue( bstrLastName );
        ...
    }
}

// Create the second simple filter object.
hr = CreateFilter(
           ILS_FILTERTYPE_SIMPLE,
           ILS_FILTEROP_EQUAL,
           &pFilterTwo);

if(SUCCEEDED(hr))
{
    // Set the filter name.
    hr = pFilterTwo->SetStandardAttributeName(
                     ILS_STDATTR_FIRST_NAME);

    if(SUCCEEDED(hr))
    {
        // Set the filter value.
        LPTSTR_to_BSTR(&bstrFirstName, "Joe*");
        hr=pFilterTwo->SetStandardAttributeValue(
                                bstrFirstName );
        ...
    }
}

// Create the composite filter object.
hr = CreateFilter(
           ILS_FILTERTYPE_COMPOSITE,
           ILS_FILTEROP_AND,
           &pFilterComp);

if(SUCCEEDED(hr))
{
    // Add the subfilters to the composite filter.
    hr = pFilterComp->AddSubFilter(pFilterOne);
    // Note - Check for success here.

    hr = pFilterComp->AddSubFilter(pFilterTwo);
    // Note - Check for success here.
}

// Use the filter we have created to enumerate users.
hr = EnumUsers(
         pServer,
         pFilterComp,
         NULL, NULL,
         &uReqID);

The preceding example is a long and complicated process for building a filter. However, such a process would allow an application to implement ad hoc filters through its own UI.

The equivalent filter can be created using the StringToFilter method as follows:

// Create the string.
LPTSTR szFilter[] =
    "(%lu = *) & (%lu = %s) & (%lu = %s)";

wsprintf(
    szFilter,
    ILS_STDATTR_USER_ID,
    ILS_STDATTR_FIRST_NAME,
    "Joe",
    ILS_STDATTR_LAST_NAME,
    "Johnson");

// Convert the string.
LPTSTR_to_BSTR(&bstrFilter, szFilter);
hr = StringToFilter(bstrFilter, &pFilter)

// Use the filter we have created to enumerate users.
hr = EnumUsers(
          pServer,
          pFilter,
          NULL, NULL,
          &uReqID);

Up Back to list of Implementing Filters topics

NetMeeting Functionality in Web Pages

The Vbocx.htm sample HTML file demonstrates just how easy it is to add Microsoft® NetMeeting™ functionality to your own Web pages. It utilizes the ActiveX™ control, Xmsconf.ocx, which is installed as part of NetMeeting. This sample demonstrates use of the control with Visual Basic® Scripting Edition (VBScript).

Some parts of this sample expect to be communicating with another instance of this sample on the remote computers. To fully exercise the sample, you should be running Vbocx.htm on every computer in the conference.

Using the VBOCX Sample

To use the VBOCX sample, simply click the link below. When the page is loaded, several edit controls and buttons will be displayed.

Vbocx.htm sample Web page

To initiate a conference, type the user ID of the remote computer you want to call in the User Name control in the upper left and click the Call button.

Note The user ID is set through the NetMeeting interface from the Tools menu.

To leave a conference, click the Leave button. The conference will end and the connection to all remote computers will be dropped.

The Refresh button will rewrite the current list of shareable applications on the system to the Conference Log window.

The Member Roster window displays the first and last names of everyone currently in the conference. Again, this information is set through the NetMeeting Tools menu.

The Conference Log window displays the current state of the conference, messages received, and the list of shareable applications. This window fills up fast but does not automatically scroll. You might need to adjust the scroll bar to see the latest information.

Transferring files between conference participants is accomplished by entering the fully qualified file name into the File To Transfer window and clicking the Send File button.

The Received Text and Transmitted Text windows, and the Send Data button, comprise a limited chat functionality. Simply enter the data to send into the Transmitted Text window and click the Send Data button. The text will be sent to all conference participants and will appear in the Received Text window.

Application sharing is performed by entering the name of the application into the Application To Share window and clicking the Share App button. Clicking the Unshare App button halts application sharing. The name of the application must exactly match one from the list of shareable applications on the system. This list is displayed when the Refresh button is clicked.

Notes

  • You must have Microsoft NetMeeting installed in order to run this sample.
  • This sample works only with Internet Explorer version 3.0 and later.

Up Back to list of Tutorials

Creating a NetMeeting Call Center

Help desks, customer service centers, and other service offerings that allow customers to ask questions or place orders can benefit from the addition of online NetMeeting functionality. Such a solution would allow you to route each caller to the best qualified representative based on the caller's question.

This tutorial explains how to set up a call center using NetMeeting and the NetMeeting Software Developers Kit.

Who Should Use This Tutorial?

Limitations

Creating A Call Center

Up Back to list of Tutorials

Who Should Use This Tutorial?

This tutorial is for developers who want to build a help desk or customer service offering using NetMeeting.

This tutorial assumes that the reader is familiar with the Microsoft® Component Object Model (COM). For more information on COM, see Inside OLE 2 by Kraig Brockschmidt.

This tutorial also assumes that the reader is familiar with tools and techniques used to author Web pages. For more information about Web page authoring, see the Microsoft Internet Client SDK. The complete Internet Client SDK is available for free download at the Internet Client SDK site.

Up Back to Creating a NetMeeting Call Center

Limitations

This tutorial provides background information necessary to integrate NetMeeting calls with customer service solutions. It does not discuss how to integrate NetMeeting with specific customer service solutions you may be using.

Up Back to Creating a NetMeeting Call Center

Creating A Call Center

There are several ways to set up a NetMeeting call center.

  • Use call center software to automatically route calls to available operators or put calls on hold as they arrive. The Partners Page on the Microsoft NetMeeting Web site provides an up-to-date listing of Web call center products that are compatible with NetMeeting.
  • Write a custom application that sends information about the caller to an operator, and then have the operator return the call. This method is similar to the Web page method above, except that it uses an application rather than a Web page to send the information.
  • Have users browse a particular ILS server to find an available customer service representative. This solution is simple to implement as it only involves setting up an ILS server. However, it is only suitable if you do not expect to have many more callers than operators at any given time.
  • Use a Web page to queue up customers, and then have operators return the calls. This method enables you to gather information about the user before selecting a customer service representative. This method is described in the next section.

What does the end user see?

If you choose to implement the last option from the list in the previous section, these are the steps the end user will follow:

  1. Click a link to the call center or service offering on your Web page.
  2. Fill in a form that requests information like the customer's name and the reason for the call. Some information, such as the return ILS address your representative will call, can be detected and provided by an application you write.
  3. Click a Submit button. This sends the information in the form to an application that you write. Your application determines how to route the call according to the information in the form.
  4. Wait for the return call. A Web page will appear to explain that a customer service representative will call back shortly.
  5. The customer receives a call from your customer service representative.

What does the customer service representative see?

Your customer service representative sees the customer's description of why he or she is calling, any other relevant information, and a Call-Back button to initiate a return NetMeeting call to the customer. The customer service representative gathers any information relevant to the customer's question and presses the Call-Back button. Pressing this button launches NetMeeting, if necessary, and returns the call.

How does it work?

You write Active Server Pages that gather the requisite information from the user. (Visit the Microsoft Active Server Pages Web site for more information.)

You can use the NetMeeting COM method to detect the customer's system information and automatically provide some of the fields. Following is a snippet from the NetMeeting documentation for this method.

HRESULT GetProperty(
    [in] NM_SYSPROP uProp,
    [out] BSTR *pbstrName);

When called with the corresponding uProp, this method can return the following types of information (in the pbstrName parameter), which can be automatically entered into the fields on the Active Server Page.
NM_SYSPROP_EMAIL_NAME | Customer's e-mail name.
NM_SYSPROP_RESOLVE_NAME | ILS name that your customer service representative can use to call the customer back.
NM_SYSPROP_SERVER_NAME | Name of the ILS server used by the customer.
NM_SYSPROP_FIRST_NAME | User's first name.
NM_SYSPROP_LAST_NAME | User'a last name.
NM_SYSPROP_USER_CITY | City.
NM_SYSPROP_USER_COMMENTS | User comments.
NM_SYSPROP_USER_COUNTRY | Country (two-letter country codes).
NM_SYSPROP_USER_NAME | User's full name (first and last).
NM_SYSPROP_USER_CATEGORY | Can be one of the following:
 | NM_CATEGORY_PERSONAL
 | NM_CATEGORY_BUSINESS
 | NM_CATEGORY_ADULT
NM_SYSPROP_INSTALL_DIRECTORY | Directory in which NetMeeting is installed.
NM_SYSPROP_IS_RUNNING | Determines if Conf.exe is running (pbstrName will return 0 if it is not running, or 1 if it is running.
NM_SYSPROP_IN_CONFERENCE | Determines if the local system is currently in a conference (pbstrName will return 0 if it is not in a conference, or 1 if it is in a conference).

When the user clicks the Submit button, your Active Server Page should send all the information the user has entered as well as the information detected by INmSysInfo::GetProperty.

Each of your customer service representatives should log onto a designated ILS server. You can write code that queries the server for available customer service representatives and assigns the incoming service request to the appropriate customer service representative. The ILS Extended Attributes tutorial contains information about setting and retrieving attributes of users logged onto an ILS server.

Once your application has chosen a customer service representative to whom the call will be routed, you can display information on his or her screen about the customer and the customer's request. You can include a button or HTML link that enables the customer service representative to initiate a NetMeeting call to the customer.

To include an HTML link, you can use the callto: protocol handler. A callto: link will work on any computer that has Microsoft® Internet Explorer and NetMeeting installed. Use one of the following formats to create a NetMeeting call link on your Web page:

Format | Example
callto:DNS name | callto:machine2.test.com
callto:IP address | callto:157.55.22.31
callto:e-mail address | callto:user@test.com
callto:server name/e-mail address | callto:uls4.microsoft.com/user@test.com

For example, if John Smith wanted to embed a link in his Web page so that other people could call him, he would add the following HTML tag:

Call me using NetMeeting at
<A HREF="callto:uls.microsoft.com/jsmith@somedomain.com>
uls.microsoft.com/jsmith@somedomain.com</A>

To include a call button in an application, use the INmManager::CreateCall method to place a call to the user at the address the user provided on the Web-based form.

HRESULT CreateCall(
    [out] INmCall **ppCall,
    [in] NM_CALL_TYPE callType,
    [in] NM_ADDR_TYPE uType,
    [in] BSTR bstrAddr,
    [in] INmConference * pConference);

Up Back to Creating a NetMeeting Call Center


References

The references in this section provide more detailed information about the interfaces provided in the NetMeeting 2.1 SDK.

COM Object Reference

Internet Locator Server Reference

ActiveX Control Reference

Installable Codecs Reference


COM Object Reference

This reference defines the COM-based objects for Microsoft® NetMeeting™ 2.1, including the interfaces and methods through which a client application makes use of object instances.

The NetMeeting COM-based objects defined in this documentation enable developers to incorporate the NetMeeting API attributes of their choice into their own applications and providing any portion of the NetMeeting communication functionality to their users.

Conceptual Diagram

COM Object, Interface, and Method Listing

Conference Manager Object

Local System Object

Call Object

Conference Object

Member Object

Channel Object

Data Channel

Audio Channel

Video Channel

File Transfer Channel

File Object

Application Sharing Channel

Application Object

Enumerator Definitions

Up Arrow Back to References


Conceptual Diagram

The NetMeeting COM objects are:

  • Conference Manager – manager of the overall conferencing system.
  • Local System – information about the local user and local computer.
  • Call – monitors and controls an incoming or outgoing call.
  • Conference – manages an instance of a conference.
  • Member – a participant in a conference.
  • Channel – a conduit for a specific type of media (application sharing, audio, data, file transfer, and video).
  • Audio Channel – a conduit for audio type media.
  • Video Channel – a conduit for video type media.
  • File Transfer Channel – manager of file transfer activity.
  • Application Sharing Channel – manager of shared applications.
  • Data Channel – a conduit for sending and receiving data between conference participants.

The following diagram gives a conceptual view of the different NetMeeting COM objects and their relationship to each other.

COM Object Conceptual Diagram

Up Arrow Back to COM Object Reference


COM Object, Interface, and Method Listing

The overall hierarchy of NetMeeting COM objects, interfaces, and methods is shown below.
Conference Manager Object
INmManager Interface | CallConference
 | CreateCall
 | CreateConference
 | EnumCall
 | EnumConference
 | GetSysInfo
 | Initialize
INmManagerNotify Interface | CallCreated
 | ConferenceCreated
 | NmUI
Local System Object
INmSysInfo Interface | GetLaunchInfo
 | GetNmApp
 | GetNmchCaps
 | GetProperty
 | GetUserData
 | IsInstalled
 | SetNmApp
 | SetProperty
 | SetUserData
Call Object
INmCall Interface | Accept
 | Cancel
 | GetAddr
 | GetConference
 | GetName
 | GetState
 | GetUserData
 | IsIncoming
 | Reject
INmCallNotify Interface | Failed
 | NmUI
 | StateChanged
Conference Object
INmConference Interface | CreateDataChannel
 | EnumChannel
 | EnumMember
 | GetChannelCount
 | GetID
 | GetMemberCount
 | GetName
 | GetNmchCaps
 | GetState
 | GetTopProvider
 | Host
 | IsHosting
 | LaunchRemote
 | Leave
INmConferenceNotify Interface | ChannelChanged
 | MemberChanged
 | NmUI
 | StateChanged
Member Object
INmMember Interface | Eject
 | GetAddr
 | GetConference
 | GetID
 | GetName
 | GetNmchCaps
 | GetNmVersion
 | GetShareState
 | GetUserData
 | IsMCU
 | IsSelf
Channel Object
INmChannel Interface | EnumMember
 | GetConference
 | GetInterface
 | GetMemberCount
 | GetNmch
 | IsActive
 | IsSameAs
 | SetActive
INmChannelNotify Interface | MemberChanged
 | NmUI
Data Channel
INmChannelData Interface | GetGuid
 | SendData
INmChannelDataNotify Interface | DataReceived
 | DataSent
 | MemberChanged
 | NmUI
Audio Channel
INmChannelAudio Interface | GetProperty
 | GetState
 | IsIncoming
 | SetProperty
INmChannelAudioNotify Interface | MemberChanged
 | NmUI
 | PropertyChanged
 | StateChanged
Video Channel
INmChannelVideo Interface | GetProperty
 | GetState
 | IsIncoming
 | SetProperty
INmChannelVideoNotify Interface | MemberChanged
 | NmUI
 | PropertyChanged
 | StateChanged
File Transfer Channel
INmChannelFt Interface | GetReceiveFileDir
 | SendFile
 | SetReceiveFileDir
INmChannelFtNotify Interface | FtUpdate
 | MemberChanged
 | NmUI
File Object
INmFt Interface | Cancel
 | GetBytesTransferred
 | GetMember
 | GetName
 | GetSize
 | GetState
 | IsIncoming
Application Sharing Channel
INmChannelAppShare Interface | EnumSharableApp
 | GetState
 | SetState
INmChannelAppShareNotify Interface | MemberChanged
 | NmUI
 | StateChanged
Application Object
INmSharableApp Interface | GetHwnd
 | GetName
 | GetState
 | SetState
Enumerator Definitions
IEnumNmConference Interface | Clone
 | Next
 | Reset
 | Skip
IEnumNmMember Interface | Clone
 | Next
 | Reset
 | Skip
IEnumNmChannel Interface | Clone
 | Next
 | Reset
 | Skip
IEnumNmCall Interface | Clone
 | Next
 | Reset
 | Skip
IEnumNmSharableApp Interface | Clone
 | Next
 | Reset
 | Skip

Up Arrow Back to COM Object Reference


Conference Manager Object

The Conference Manager object is the manager of the overall conference. An INmManager object can be created by using CoCreateInstance with a predefined class identifier (CLSID_NmManager) and interface (IID_INmManager).

INmManager Interface
INmManagerNotify Interface

Up Arrow Back to COM Object Reference

INmManager Interface

This interface enables you to create and retrieve information about conferences and calls.

CallConference
CreateCall
CreateConference
EnumCall
EnumConference
GetSysInfo
Initialize

Up Arrow Back to Conference Manager Object

INmManager::CallConference

HRESULT CallConference(
    [out] INmCall **ppCall,
    [in] NM_CALL_TYPE callType,
    [in] NM_ADDR_TYPE addrType,
    [in] BSTR bstrAddr,
    [in] BSTR bstrName,
    [in] BSTR bstrPassword);

Provides a pointer to an INmCall Interface on a new Call object.

  • Returns one of the following values:
    S_OK | Success.
    E_POINTER | ppCall is an invalid pointer.
    E_INVALIDARG | The bstrName or bstrAddr string is invalid.
    E_FAIL | An internal resource is not available.
    E_OUTOFMEMORY | Memory could not be allocated to service the request.
    NM_E_NOT_INITIALIZED | The Conference Manager object was not initialized.
    NM_E_NOT_ACTIVE | NetMeeting is not running.
ppCall
Pointer to a pointer to the INmCall Interface on the new Call object.
callType
NM_CALL_TYPE that identifies call types. Constants include:
NM_CALL_DEFAULT | Allows audio, video, and data conferences.
NM_CALL_H323 | Allows audio and video conferences.
NM_CALL_T120 | Allows data conferences.
addrType
NM_ADDR_TYPE that identifies the type of the user name or address. Constants include:
NM_ADDR_H323_GATEWAY | For calling a normal phone line. bstrAddr must be an IP address of the gateway server and the phone number (www.xxx.yyy.zzz/number). See INmManager::CreateCall.
NM_ADDR_IP | bstrAddr requires an IP address.
NM_ADDR_MACHINENAME | bstrAddr requires a computer name.
NM_ADDR_ULS | bstrAddr requires an ILS server name and the e-mail name (server/e-mail).
NM_ADDR_UNKNOWN | NetMeeting will determine if the bstrAddr string is a computer name, an ILS address, or an IP address.
bstrAddr
BSTR that contains the user's name or address.
bstrName
BSTR that contains the conference name.
bstrPassword
BSTR that contains a password. Password-protected conferences are currently unsupported. This parameter should be set to NULL.

This method places a NetMeeting call, and it can be used to call and join a conference with a specific name.

If known, it is recommended that applications use an explicit constant for addrType, such as NM_ADDR_IP, NM_ADDR_MACHINENAME, or NM_ADDR_ULS, instead of using NM_ADDR_UNKNOWN.

Up Arrow Back to INmManager Interface

Up Arrow Back to Conference Manager Object

Up Arrow Back to COM Object Listing

INmManager::CreateCall

HRESULT CreateCall(
    [out] INmCall **ppCall,
    [in] NM_CALL_TYPE callType,
    [in] NM_ADDR_TYPE uType,
    [in] BSTR bstrAddr,
    [in] INmConference * pConference);

Places a call to a remote computer. Provides a pointer to an INmCall Interface on a new Call object.

  • Returns one of the following values:
    S_OK | Success.
    E_POINTER | ppCall is an invalid pointer.
    E_INVALIDARG | The bstrAddr 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.
    NM_E_NOT_ACTIVE | NetMeeting is not running.
    NM_E_NOT_INITIALIZED | The Conference Manager object was not initialized.
ppCall
Pointer to a pointer to the returned INmCall Interface on a Call object. Can be set to NULL if the application does not need to use the returned Call object.
callType
NM_CALL_TYPE that identifies call types. Constants include:
NM_CALL_DEFAULT | Allows audio, video, and data conferences.
NM_CALL_H323 | Allows audio and video conferences.
NM_CALL_T120 | Allows data conferences.
uType
NM_ADDR_TYPE that identifies the type of the user name or address. Constants include:
NM_ADDR_H323_GATEWAY | For calling a normal phone line. bstrAddr must be an IP address of the gateway server (www.xxx.yyy.zzz/number). See comments.
NM_ADDR_IP | bstrAddr requires an IP address.
NM_ADDR_MACHINENAME | bstrAddr requires a computer name.
NM_ADDR_ULS | bstrAddr requires an ILS server name.
NM_ADDR_UNKNOWN | NetMeeting will determine if the bstrAddrstring is a computer name or an IP address.
bstrAddr
BSTR that contains the target of the call. Depending on the uType constant, this may take the form of an IP address, a computer name, an ILS server name, or the gateway server and phone number.
pConference
Pointer to the INmConference Interface on a Conference object. If pConference is NULL, this method will use the current active Conference object or create a new one, if needed.

If uType is NM_ADDR_H323_GATEWAY, the bstrAddr string must take the form IP address/number, or "www.xxx.yyy.zzz/number". IP address is the address of the gateway to use, and number is the phone number to dial. The allowed character set for the "number" half of bstrAddr is comprised of the following characters: 0123456789#*. NetMeeting will automatically strip extraneous characters. For example, the string "(425) 555 - 1212" becomes "4255551212" when it is passed to the gateway.

Up Arrow Back to INmManager Interface

Up Arrow Back to Conference Manager Object

Up Arrow Back to COM Object Listing

INmManager::CreateConference

HRESULT CreateConference(
    [out] INmConference **ppConference,
    [in] BSTR bstrName,
    [in] BSTR bstrPassword,
    [in] ULONG uchCaps);

Creates a conference on the local computer. Provides a pointer to an INmConference Interface on a new Conference object.

An application may create any number of Conference objects, but only one Conference object may be active at any given time. All others must be idle.

  • Returns one of the following values:
    S_OK | Success.
    E_POINTER | ppConference is an invalid pointer.
    E_INVALIDARG | The bstrName string is invalid, or uchCaps 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.
    NM_E_NOT_ACTIVE | NetMeeting is not running.
ppConference
Pointer to a pointer to the INmConference Interface on the new Conference object.
bstrName
BSTR that contains the conference name. This string cannot be NULL, and it cannot be a string of spaces.
bstrPassword
BSTR that contains a password. Password-protected conferences are currently unsupported. This parameter should be set to NULL.
uchCaps
Channel type. Can be NMCH_ALL, NMCH_NONE, or any combination of the remaining channel type constants. Determines what type of channel notifications the application will receive. This does not prevent other types of channels from being used.
NMCH_ALL | All channel notifications.
NMCH_AUDIO | Audio conferencing notifications only.
NMCH_DATA | Data conferencing notifications only.
NMCH_FT | File Transfer notifications only.
NMCH_NONE | No channel notifications.
NMCH_SHARE | Application Sharing notifications only.
NMCH_VIDEO | Video conferencing notifications only.

Up Arrow Back to INmManager Interface

Up Arrow Back to Conference Manager Object

Up Arrow Back to COM Object Listing

INmManager::EnumCall

HRESULT EnumCall(
    [out] IEnumNmCall **ppEnum);

Provides access to an enumerator that can be used to list each call in progress. The IEnumNmCall Interface methods can be used to manipulate this enumerator.

  • Returns one of the following values:
    S_OK | Success.
    E_POINTER | ppEnum is an invalid pointer.
    E_FAIL | Internal resources are not available.
    E_OUTOFMEMORY | Memory could not be allocated to service the request.
    NM_E_NOT_INITIALIZED | The Conference Manager object was not initialized.
ppEnum
Pointer to a pointer to an enumerator for existing Call objects.

Up Arrow Back to INmManager Interface

Up Arrow Back to Conference Manager Object

Up Arrow Back to COM Object Listing

INmManager::EnumConference

HRESULT EnumConference(
    [out] IEnumNmConference **ppEnum);

Provides access to an enumerator that can be used to list each conference in progress. The IEnumNmConference Interface methods can be used to manipulate this enumerator.

  • Returns one of the following values:
    S_OK | Success.
    E_POINTER | ppEnum is an invalid pointer.
    E_FAIL | Internal resources are not available.
    E_OUTOFMEMORY | Memory could not be allocated to service the request.
    NM_E_NOT_INITIALIZED | The Conference Manager object was not initialized.
ppEnum
Pointer to a pointer to the IEnumNmCall Interface of the enumerator for existing Conference objects.

If there is a conference in progress, you can use it rather than start a new one. With the current implementation of NetMeeting, there can be only one active conference at a time.

Up Arrow Back to INmManager Interface

Up Arrow Back to Conference Manager Object

Up Arrow Back to COM Object Listing

INmManager::GetSysInfo

HRESULT GetSysInfo(
    [out] INmSysInfo **ppSysInfo);

Provides a pointer to an INmSysInfo Interface on a Local System object.

  • Returns S_OK if successful, or E_POINTER if the ppSysInfo pointer is invalid.
ppSysInfo
Pointer to a pointer to the INmSysInfo Interface on the new Local System object, which provides general information about the local computer and local user. Methods in the INmSysInfo Interface can be used to access this information.

This method can be called before INmManager::Initialize.

Up Arrow Back to INmManager Interface

Up Arrow Back to Conference Manager Object

Up Arrow Back to COM Object Listing

INmManager::Initialize

HRESULT Initialize(
    [in, out] ULONG * puOptions,
    [in, out] ULONG * puchCaps);

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

  • Returns one of the following values:
    S_OK | Success.
    E_FAIL | The Conference Manager object was already initialized or the conference services are not available.
    E_ACCESSDENIED | The Conference Manager object is being initialized on a thread other than the one on which it was created.
puOptions
Pointer to a ULONG that specifies the options to be used. This can be one of the following:
NM_INIT_NORMAL | Starts NetMeeting as normal. The NetMeeting user interface will be visible.
NM_INIT_CONTROL | Request control of the NetMeeting user interface. NetMeeting UI will not be visible.
NM_INIT_NO_LAUNCH | Do not start NetMeeting if it isn't already running.
puchCaps
Pointer to a ULONG that specifies the types of channels allowed. This can be NMCH_ALL, NMCH_NONE, or any combination of the other types.
NMCH_ALL | All channel notifications.
NMCH_AUDIO | Audio conferencing notifications only.
NMCH_DATA | Data conferencing notifications only.
NMCH_FT | File Transfer notifications only.
NMCH_NONE | No channel notifications.
NMCH_SHARE | Application Sharing notifications only.
NMCH_VIDEO | Video conferencing notifications only.

If NM_INIT_NORMAL was not used and NetMeeting was already running, the method will return S_OK, but will change puOptions to NM_INIT_NORMAL.

If NM_INIT_CONTROL is passed into and returned from this method, the INmManagerNotify::NmUI method must be implemented, and the application must handle the display of all dialogs and other user interface elements.

When an application accepts a call, the NetMeeting user interface will be displayed unless puOptions is set to NM_INIT_CONTROL.

Up Arrow Back to INmManager Interface

Up Arrow Back to Conference Manager Object

Up Arrow Back to COM Object Listing

INmManagerNotify Interface

This is an event notification sink interface for the INmManager interface. The methods in this interface are called by the Conference Manager object when specific events occur.

These event sink methods should be defined and implemented by the client application to respond to notifications from a Conference Manager object. For example, the INmManagerNotify::NmUI method is notified when a conference change occurs. The client application implementation of this method could provide a display to the user of that event.

CallCreated
ConferenceCreated
NmUI

Up Arrow Back to Conference Manager Object

INmManagerNotify::CallCreated

HRESULT CallCreated(
    [in] INmCall *pCall);

Called by the Conference Manager object when an incoming call is received or when an outgoing call is placed.

  • This event sink should always return S_OK to the event source.
pCall
Pointer to the INmCall Interface on the Call object.

Up Arrow Back to INmManagerNotify Interface

Up Arrow Back to Conference Manager Object

Up Arrow Back to COM Object Listing

INmManagerNotify::ConferenceCreated

HRESULT ConferenceCreated(
    [in] INmConference *pConference);

Called by the Conference Manager object when a new conference is created. The Conference object can be used as if it were activated by the client application.

  • This event sink should always return S_OK to the event source.
pConference
Pointer to the INmConference Interface on the Conference object.

Up Arrow Back to INmManagerNotify Interface

Up Arrow Back to Conference Manager Object

Up Arrow Back to COM Object Listing

INmManagerNotify::NmUI

HRESULT NmUI(
    [in] CONFN uNotify);

Receives event notification when a conference change occurs that might require notification to be displayed to the user. This is not required if the Conference Manager object was initialized with NM_INIT_NORMAL.

  • This event sink should always return S_OK to the event source.
uNotify
Identifier of an event constant during a conference. This can include the following values:
CONFN_NM_STARTED | The NetMeeting system was started.
CONFN_NM_STOPPED | The NetMeeting system was stopped.

Up Arrow Back to INmManagerNotify Interface

Up Arrow Back to Conference Manager Object

Up Arrow Back to COM Object Listing


Local System Object

The Local System object manages information about the current computer and the local user.

The Local System object is instantiated with the INmManager::GetSysInfo method.

INmSysInfo Interface

Up Arrow Back to COM Object Reference

INmSysInfo Interface

This interface provides information about the current computer and local user.

GetLaunchInfo
GetNmApp
GetNmchCaps
GetProperty
GetUserData
IsInstalled
SetNmApp
SetProperty
SetUserData

Up Arrow Back to Local System Object

INmSysInfo::GetLaunchInfo

HRESULT GetLaunchInfo(
    [out] INmConference **ppConference,
    [out] INmMember **ppMember);

Retrieves information about how this application was launched, including the member who requested the launch and the current associated conference.

  • Returns one of the following values:
    S_OK | Success.
    E_POINTER | The ppConference or ppMember parameter is invalid.
    S_FALSE | The application was not launched by a remote system, or the original conference is no longer valid.
ppConference
Pointer to a pointer to the INmConference Interface on the current active Conference object, if it still exists. This parameter will be set to NULL if the Conference object no longer exists.
ppMember
Pointer to a pointer to the INmMember Interface on the Member object that requested the application be launched. This parameter can be set to NULL if the Member object is no longer in the conference.

An application launched on a remote node calling INmConference::LaunchRemote can use this method at any time.

If a remote system was used to launch this application, this method can be used to determine that Member object and Conference object.

For more information, see the tutorial.

Up Arrow Back to INmSysInfo

Up Arrow Back to Local System Object

Up Arrow Back to COM Object Listing

INmSysInfo::GetNmApp

HRESULT GetNmApp(
    [in] REFGUID rguid,
    [out] BSTR *pbstrApplication,
    [out] BSTR *pbstrCommandLine,
    [out] BSTR *pbstrDirectory);

Retrieves the settings for a locally registered NetMeeting application.

  • Returns one of the following values:
    S_OK | Success.
    E_OUTOFMEMORY | The function could not retrieve the parameters.
    E_POINTER | The pbstrApplication, pbstrCommandLine, or pbstrDirectory parameter is invalid.
rguid
GUID (globally unique identifier) for the registered application.
pbstrApplication
Pointer to a string that contains the full path and file name for the application associated with the rguid parameter.
pbstrCommandLine
Pointer to a BSTR that contains the executable command line to be passed to the application associated with the rguid parameter.
pbstrDirectory
Pointer to a BSTR that contains the current drive and directory for the child process. This string must be a full path and file name that includes a drive letter.

Use INmSysInfo::SetNmApp to register an application.

For more informaiton, see INmConference::LaunchRemote.

Up Arrow Back to INmSysInfo Interface

Up Arrow Back to Local System Object

Up Arrow Back to COM Object Listing

INmSysInfo::GetNmchCaps

HRESULT GetNmchCaps(
    [out] ULONG *pchCaps);

Retrieves the channel capabilities of the local computer.

  • Returns one of the following values:
    S_OK | Success.
    E_POINTER | The pchCaps pointer is invalid.
    S_FALSE | NetMeeting is not running. Information returned may not be valid.
pchCaps
Pointer to a ULONG that contains information on the channel capabilities. Constants may include any combination of the following, or none, in which case NMCH_NULL is used.
NMCH_AUDIO | Audio channel
NMCH_DATA | Data channel
NMCH_FT | File Transfer channel
NMCH_SHARE | Shareable Application channel
NMCH_VIDEO | Video channel

Up Arrow Back to INmSysInfo Interface

Up Arrow Back to Local System Object

Up Arrow Back to COM Object Listing

INmSysInfo::GetProperty

HRESULT GetProperty(
    [in] NM_SYSPROP uProp,
    [out] BSTR *pbstrName);

Retrieves information about the Local System object.

  • Returns one of the following values:
    S_OK | Success.
    E_POINTER | pbstrName is an invalid pointer.
    E_FAIL | Internal resources are not available.
uProp
NM_SYSPROP that identifies the system property type. Constants include:
NM_SYSPROP_EMAIL_NAME | E-mail name.
NM_SYSPROP_RESOLVE_NAME | Resolved name (server/e-mail).
NM_SYSPROP_SERVER_NAME | Server name.
NM_SYSPROP_FIRST_NAME | User's first name.
NM_SYSPROP_LAST_NAME | User's last name.
NM_SYSPROP_USER_CITY | City.
NM_SYSPROP_USER_COMMENTS | User comments.
NM_SYSPROP_USER_COUNTRY | Country (see the comments section for the two-letter country/region codes).
NM_SYSPROP_USER_NAME | User's full name (combined first and last name).
NM_SYSPROP_USER_CATEGORY | Can be one of the following:
NM_CATEGORY_PERSONAL
NM_CATEGORY_BUSINESS
NM_CATEGORY_ADULT
NM_SYSPROP_H323_GATEWAY | IP address of the H323 gateway.
NM_SYSPROP_H323_GATEWAY_ENABLE | Indicates if the H323 gateway is enabled (pbstrName will be 0 if disabled or 1 if enabled).
NM_SYSPROP_INSTALL_DIRECTORY | Path to the directory in which NetMeeting is installed.
NM_SYSPROP_APP_NAME | Node controller name.
NM_SYSPROP_IS_RUNNING | Determines if NetMeeting system is running (pbstrName will contain 0 if the NetMeeting system is not running or 1 if the NetMeeting system is running).
NM_SYSPROP_IN_CONFERENCE | Determines if the local system is currently in a conference (pbstrName will contain 0 if the local system is not in a conference or 1 if the local system is in a conference).
pbstrName
Pointer to a BSTR containing the local user property.

Also see INmSysInfo::SetProperty.

NetMeeting uses the following two-letter country/region codes for NM_SYSPROP_USER_COUNTRY.
AF | Afghanistan
AL | Albania
DZ | Algeria
AD | Andorra
AO | Angola
AG | Antigua And Barbuda
AR | Argentina
AM | Armenia
AU | Australia
AT | Austria
AZ | Azerbaijan
BS | Bahamas
BH | Bahrain
BD | Bangladesh
BB | Barbados
BY | Belarus
BE | Belgium
BZ | Belize
BJ | Benin
BT | Bhutan
BO | Bolivia
BA | Bosnia And Herzegovina
BW | Botswana
BR | Brazil
BN | Brunei Darussalam
BG | Bulgaria
BF | Burkina Faso
BI | Burundi
KH | Cambodia
CM | Cameroon
CA | Canada
CV | Cape Verde
CF | Central African Republic
TD | Chad
CL | Chile
CN | China
CO | Colombia
KM | Comoros
CG | Congo
CR | Costa Rica
CI | Cote d'Ivoire
HR | Croatia
CU | Cuba
CY | Cyprus
CZ | Czech Republic
DK | Denmark
DJ | Djibouti
DM | Dominica
DO | Dominican Republic
EC | Ecuador
EG | Egypt
SV | El Salvador
GQ | Equatorial Guinea
ER | Eritrea
EE | Estonia
ET | Ethiopia
FJ | Fiji
FI | Finland
FR | France
GA | Gabon
GM | Gambia, Republic of The
GE | Georgia
DE | Germany
GH | Ghana
GR | Greece
GD | Grenada
GT | Guatemala
GN | Guinea
GW | Guinea-Bissau
GY | Guyana
HT | Haiti
HN | Honduras
HU | Hungary
IS | Iceland
IN | India
ID | Indonesia
IR | Iran
IQ | Iraq
IE | Ireland
IL | Israel
IT | Italy
JM | Jamaica
JP | Japan
JO | Jordan
KZ | Kazakhstan
KE | Kenya
KI | Kiribati
KP | Korea, Democratic People's Republic of
KR | Korea, Republic of
KW | Kuwait
KG | Kyrgyzstan
LA | Laos
LV | Latvia
LB | Lebanon
LS | Lesotho
LR | Liberia
LY | Libyan Arab Jamahiriya
LI | Liechtenstein
LT | Lithuania
LU | Luxembourg
MK | Macedonia, Former Yugoslav Republic of
MG | Madagascar
MW | Malawi
MY | Malaysia
MV | Maldives
ML | Mali
MT | Malta
MH | Marshall Islands
MR | Mauritania
MU | Mauritius
MX | Mexico
FM | Micronesia, Federated States of
MD | Moldova
MC | Monaco
MN | Mongolia
MA | Morocco
MZ | Mozambique
MM | Myanmar
NA | Namibia
NR | Nauru
NP | Nepal
NL | Netherlands
NZ | New Zealand
NI | Nicaragua
NE | Niger
NG | Nigeria
NO | Norway
OM | Oman
PK | Pakistan
PW | Palau
PA | Panama
PG | Papua New Guinea
PY | Paraguay
PE | Peru
PH | Philippines
PL | Poland
PT | Portugal
QA | Qatar
RO | Romania
RU | Russian Federation
RW | Rwanda
KN | Saint Kitts And Nevis
LC | Saint Lucia
VC | Saint Vincent And The Grenadines
SM | San Marino
ST | Sao Tome And Principe
SA | Saudi Arabia
SN | Senegal
SC | Seychelles
SL | Sierra Leone
SG | Singapore
SK | Slovakia (Slovak Republic)
SI | Slovenia
SB | Solomon Islands
SO | Somalia
ZA | South Africa
ES | Spain
LK | Sri Lanka
SD | Sudan
SR | Suriname
SZ | Swaziland
SE | Sweden
CH | Switzerland
SY | Syrian Arab Republic
TW | Taiwan
TJ | Tajikistan
TZ | Tanzania, United Repulic of
TH | Thailand
TG | Togo
TO | Tonga
TT | Trinidad And Tobago
TN | Tunisia
TR | Turkey
TM | Turkmenistan
TV | Tuvalu
UG | Uganda
UA | Ukraine
AE | United Arab Emirates
GB | United Kingdom
US | United States
UY | Uruguay
UZ | Uzbekistan
VU | Vanuatu
VA | Vatican City
VE | Venezuela
VN | Vietnam
EH | Western Sahara
YE | Yemen
YU | Yugoslavia
ZR | Zaire
ZM | Zambia
ZW | Zimbabwe

Up Arrow Back to INmSysInfo Interface

Up Arrow Back to Local System Object

Up Arrow Back to COM Object Listing

INmSysInfo::GetUserData

HRESULT GetUserData(
    [in] REFGUID rguid,
    [out] BYTE **ppb,
    [out] ULONG *pcb);

Retrieves the private data for the local user associated with a specific GUID.

This method is not yet implemented.

  • Returns one of the following values:
    S_OK | Success.
    E_POINTER | The ppb or pcb pointers are invalid.
    E_INVALIDARG | The rguid parameter is invalid.
rguid
Globally unique identifier (GUID) for the data.
ppb
Pointer to a pointer to the data.
pcb
Pointer to a ULONG containing the size of the data.

Also see INmSysInfo::SetUserData.

Up Arrow Back to INmSysInfo Interface

Up Arrow Back to Local System Object

Up Arrow Back to COM Object Listing

INmSysInfo::IsInstalled

HRESULT IsInstalled(void);

Checks to see if NetMeeting is properly installed.

  • Returns one of the following values:
    E_FAIL | No NetMeeting components are installed.
    NM_E_NOT_INITIALIZED | One or more NetMeeting settings are not valid.
    S_FALSE | The NetMeeting settings appear to be valid, but the NetMeeting wizard has not run.
    S_OK | Everything is installed properly.

Up Arrow Back to INmSysInfo Interface

Up Arrow Back to Local System Object

Up Arrow Back to COM Object Listing

INmSysInfo::SetNmApp

HRESULT SetNmApp(
    [in] REFGUID rguid,
    [in] BSTR bstrApplication,
    [in] BSTR bstrCommandLine,
    [in] BSTR bstrDirectory);

Registers a local application for remote launching by NetMeeting.

  • Returns S_OK.
rguid
GUID (globally unique identifier) of the application.
bstrApplication
Full path and file name of the module that will be started when there is an incoming request to launch the application associated with the rguid parameter. The bstrApplication parameter can be NULL. In that case, the module name must be the first white-space-delimited token in the bstrCommandLine string.
bstrCommandLine
Command line to execute. This parameter can be NULL. In that case, the function uses the string pointed to by bstrApplication as the command line.
bstrDirectory
Current drive and directory for the child process. The string must be a full path and file name that includes a drive letter. If this parameter is NULL, the application is started with the same current drive and directory as the calling process.

If all of the bstr parameters are NULL, the entry is deleted from the registry.

For more information, see the tutorial.

For more information, see INmSysInfo::GetNmApp, INmConference::LaunchRemote

Up Arrow Back to INmSysInfo Interface

Up Arrow Back to Local System Object

Up Arrow Back to COM Object Listing

INmSysInfo::SetProperty

HRESULT SetProperty(
    [in] NM_SYSPROP uProp,
    [in] BSTR bstrName);

Sets the property of the local user.

  • Returns S_OK if successful, or E_INVALIDARG if the bstrName string is invalid.
uProp
NM_SYSPROP that identifies the system property type. Constants include:
NM_SYSPROP_EMAIL_NAME | E-mail name.
NM_SYSPROP_RESOLVE_NAME | Resolved name (server/e-mail).
NM_SYSPROP_SERVER_NAME | Server name.
NM_SYSPROP_FIRST_NAME | User's first name.
NM_SYSPROP_LAST_NAME | User's last name.
NM_SYSPROP_USER_CITY | City.
NM_SYSPROP_USER_COMMENTS | User comments.
NM_SYSPROP_USER_COUNTRY | Country (see the comments section for the two-letter country/region codes).
NM_SYSPROP_USER_NAME | User's full name (combined first and last name).
NM_SYSPROP_USER_CATEGORY | Can be one of the following:
NM_CATEGORY_PERSONAL
NM_CATEGORY_BUSINESS
NM_CATEGORY_ADULT
NM_SYSPROP_H323_GATEWAY | IP address of the H323 gateway.
NM_SYSPROP_H323_GATEWAY_ENABLE | Indicates if the H323 gateway is enabled (pbstrName will be 0 if disabled or 1 if enabled).
bstrName
BSTR containing the corresponding property string value.

If you set the NM_SYSPROP_USER_NAME property before first-time initialization, it will be overwritten by the concatenation of NM_SYSPROP_FIRST_NAME and NM_SYSPROP_LAST_NAME. You can set the property after first-time initialization, and the setting will hold for subsequent initializations.

To set NM_SYSPROP_USER_CATEGORY to Personal, pass "1" in the BSTR . To set NM_SYSPROP_USER_CATEGORY to Business, pass " 2"in the BSTR . To set NM_SYSPROP_USER_CATEGORY to Adult, pass " 4"in the BSTR .

When running NetMeeting for the first time, a wizard appears to collect data from the new user. To prevent this for an application in No-UI mode (NM_INIT_CONTROL), the following set of system properties must be set using this method.

NM_SYSPROP_EMAIL_NAME
NM_SYSPROP_SERVER_NAME
NM_SYSPROP_RESOLVE_NAME
NM_SYSPROP_FIRST_NAME
NM_SYSPROP_LAST_NAME
NM_SYSPROP_USER_NAME
NM_SYSPROP_USER_CITY
NM_SYSPROP_USER_COUNTRY
NM_SYSPROP_USER_COMMENTS
NM_SYSPROP_USER_CATEGORY

Also see INmSysInfo::GetProperty.

NetMeeting uses two-letter country/region codes for NM_SYSPROP_USER_COUNTRY.

Up Arrow Back to INmSysInfo Interface

Up Arrow Back to Local System Object

Up Arrow Back to COM Object Listing

INmSysInfo::SetUserData

HRESULT SetUserData(
    [in] REFGUID rguid,
    [in] BYTE *pb,
    [in] ULONG cb);

Sets information for the local user that is sent when placing a call and identifies this information with a unique GUID.

This method is not yet implemented.

  • Returns one of the following values:
    S_OK | Success.
    E_POINTER | pb is an invalid pointer.
    E_INVALIDARG | The rguid parameter is invalid.
rguid
Globally unique identifier (GUID) of the data.
pb
Pointer to the data.
cb
Size of the data that is pointed to by pb.

Up Arrow Back to INmSysInfo Interface

Up Arrow Back to Local System Object

Up Arrow Back to COM Object Listing


Call Object

The Call object manages incoming and outgoing calls.

A Call object can be instantiated with the INmManager::CreateCall method and is also created by the system for incoming calls. The IEnumNmCall Interface can be used to manipulate all the calls in progress. Use INmManager::EnumCall to instantiate the IEnumNmCall Interface.

INmCall Interface
INmCallNotify Interface

Up Arrow Back to COM Object Reference

INmCall Interface

This interface manages all calls, including accepting, rejecting, and canceling new calls.

Accept
Cancel
GetAddr
GetConference
GetName
GetState
GetUserData
IsIncoming
Reject

Up Arrow Back to Call Object

INmCall::Accept

HRESULT Accept(void);

Accepts an invitation to a conference.

  • Returns S_OK if successful, or E_FAIL if the call state is not NM_CALL_RING.

This method is only valid for incoming calls while the call state equals NM_CALL_RING.

This method will trigger an NM_CALL_ACCEPTED notification if successful.

The application should monitor INmCallNotify::StateChanged for the current conference state.

Up Arrow Back to INmCall Interface

Up Arrow Back to Call Object

Up Arrow Back to COM Object Listing

INmCall::Cancel

HRESULT Cancel(void);

Cancels the request to join a conference or cancels placement of a call.

  • Returns S_OK if successful, or returns E_FAIL if it is an incoming call. (Incoming calls cannot be canceled. They require use of the INmCall::Accept or INmCall::Reject method.)

Up Arrow Back to INmCall Interface

Up Arrow Back to Call Object

Up Arrow Back to COM Object Listing

INmCall::GetAddr

HRESULT GetAddr(
    [out] BSTR *pbstrAddr,
    [out] NM_ADDR_TYPE *puType);

Retrieves the address information of the person being called if this is an outgoing call. Retrieves the address of the remote computer if this is an incoming call.

  • Returns one of the following values:
    S_OK | Success.
    E_POINTER | pbstrAddr is an invalid pointer, or puType is invalid.
    E_FAIL | Internal resources are not available.
pbstrAddr
Pointer to a BSTR that contains the local user's name or address.
puType
Pointer to an NM_ADDR_TYPE that identifies the type of the user name or address. This can be one of the following:
NM_ADDR_H323_GATEWAY | IP address of the gateway server and the phone number (www.xxx.yyy.zzz/number). Also see INmManager::CreateCall.
NM_ADDR_IP | IP address.
NM_ADDR_MACHINENAME | Machine name.
NM_ADDR_ULS | ILS server name and the e-mail name (server/e-mail).
NM_ADDR_UNKNOWN | Unknown type.

The information retrieved by this method may not be available if the call does not have data capabilities (is audio/video only) or if the local or remote computer is running NetMeeting 2.0 or earlier.

Up Arrow Back to INmCall Interface

Up Arrow Back to Call Object

Up Arrow Back to COM Object Listing

INmCall::GetConference

HRESULT GetConference(
    [out] INmConference **ppConference);

Retrieves a pointer to an INmConference Interface on the current Conference object.

  • Returns one of the following values:
    S_OK | Success.
    S_FALSE | There is no conference associated with the call.
    E_POINTER | The ppConference pointer is invalid.
ppConference
Pointer to a pointer to the INmConference Interface on the Conference object.

When this method is successfully called (returns S_OK), the calling application must call Release on the resulting conference pointer when finished.

If no conference is currently associated with the call, this method will return S_FALSE and the conference object will be set to NULL.

Up Arrow Back to INmCall Interface

Up Arrow Back to Call Object

Up Arrow Back to COM Object Listing

INmCall::GetName

HRESULT GetName(
    [out] BSTR *pbstrName);

Retrieves information about the remote user if it is available. If the call is incoming, this method retrieves the remote user's name. If the call is outgoing, this method retrieves the remote user's address (computer name or IP address).

  • Returns one of the following values:
    S_OK | Success.
    E_POINTER | pbstrName is an invalid pointer.
    E_FAIL | Internal resources are not available.
pbstrName
Pointer to a BSTR containing the name or address of the user.

Up Arrow Back to INmCall Interface

Up Arrow Back to Call Object

Up Arrow Back to COM Object Listing

INmCall::GetState

HRESULT GetState(
    [out] NM_CALL_STATE *pState);

Retrieves the state of the call.

  • Returns one of the following values:
    S_OK | Success.
    E_POINTER | pState is an invalid pointer.
    E_FAIL | Internal resources are not available.
pState
NM_CALL_STATE that identifies the call state. Constants include:
NM_CALL_ACCEPTED | The call has been accepted.
NM_CALL_CANCELED | The call has been canceled.
NM_CALL_INIT | The call is being initialized.
NM_CALL_INVALID | The call is invalid.
NM_CALL_REJECTED | The call was rejected or ignored.
NM_CALL_RING | The incoming call is waiting for a response. (For more information, see INmCall::Accept and INmCall::Reject.)
NM_CALL_SEARCH | The outgoing call is in the process of finding the destination address.
NM_CALL_WAIT | The outgoing call is waiting for a response from the remote system.

Up Arrow Back to INmCall Interface

Up Arrow Back to Call Object

Up Arrow Back to COM Object Listing

INmCall::GetUserData

HRESULT GetUserData(
    [in] REFGUID rguid,
    [out] BYTE **ppb,
    [out] ULONG *pcb);

Retrieves information about a user that is associated with a specific globally unique identifier (GUID).

This method is not yet implemented.

  • Returns one of the following values:
    S_OK | Success.
    E_POINTER | The ppb or pcb pointer is invalid.
    E_INVALIDARG | The rguid parameter is invalid.
    E_FAIL | Internal resources are not available.
rguid
GUID of the user data to retrieve.
ppb
Pointer to a pointer to the data.
pcb
Pointer to the size of the data.

Up Arrow Back to INmCall Interface

Up Arrow Back to Call Object

Up Arrow Back to COM Object Listing

INmCall::IsIncoming

HRESULT IsIncoming(void);

Determines if the Call object represents an incoming call or an outgoing call.

  • Returns S_OK if the call is incoming, or S_FALSE if the call is outgoing.

Up Arrow Back to INmCall Interface

Up Arrow Back to Call Object

Up Arrow Back to COM Object Listing

INmCall::Reject

HRESULT Reject(void);

Rejects an invitation to a conference.

  • Returns S_OK if successful, or E_FAIL if the call state is not NM_CALL_RING or if the call is not incoming.

This method is valid for incoming calls only while the call state equals NM_CALL_RING.

Up Arrow Back to INmCall Interface

Up Arrow Back to Call Object

Up Arrow Back to COM Object Listing

INmCallNotify Interface

This is an event notification sink interface for the INmCall interface. The methods in this interface are called by the Call object when specific events occur.

These event sink methods should be defined and implemented by the client application to respond to notifications from a Call object. For example, the INmCallNotify::StateChanged method is notified when the status (which includes a variety of states) of a call has changed. The client application implementation of this method could provide a display to the user for each of these state changes when they occur.

The application must be in control of the NetMeeting user interface (it must have successfully initialized with NM_INIT_CONTROL) for it to be notified of incoming calls.

Accepted
Failed
NmUI
StateChanged

Up Arrow Back to Call Object

INmCallNotify::Accepted

HRESULT Accepted(
    [in] INmConference *pConference);

Indicates that a call attempt has been accepted into the conference.

  • This event sink should always return S_OK to the event source.
pConference
Pointer to an INmConference Interface on the Conference object.

This method is notified only when the remote computer has accepted a call. When the local computer accepts a call an INmCallNotify::StateChanged notification is triggered.

Up Arrow Back to INmCallNotify Interface

Up Arrow Back to Call Object

Up Arrow Back to COM Object Listing

INmCallNotify::Failed

HRESULT Failed(
    [in] ULONG uError);

Indicates that a call attempt has failed.

  • This event sink should always return S_OK to the event source.
uError
ULONG that identifies the reason for the failed call. Constants include:
NM_CALLERR_AUDIO | Audio connection failed.
NM_CALLERR_AUDIO_LOCAL | Local audio device already in use.
NM_CALLERR_AUDIO_REMOTE | Remote audio device in use.
NM_CALLERR_CONFERENCE_NAME | Problem with the conference name.
NM_CALLERR_IN_CONFERENCE | Remote system is in a conference.
NM_CALLERR_MCU | Can't invite a multipoint control unit into an existing conference.
NM_CALLERR_MEDIA | Invalid channel/media types.
NM_CALLERR_NAME_RESOLUTION | Name resolution failed.
NM_CALLERR_NOT_FOUND | User/Address not found.
NM_CALLERR_NOT_INITIALIZED | Local system not initialized.
NM_CALLERR_PASSWORD | Invalid conference password. Password-protected conferences are currently unsupported.
NM_CALLERR_REJECTED | Remote system rejected the request.
NM_CALLERR_UNKNOWN | Unknown call error.

Up Arrow Back to INmCallNotify Interface

Up Arrow Back to Call Object

Up Arrow Back to COM Object Listing

INmCallNotify::NmUI

HRESULT NmUI(
    [in] CONFN uNotify);

Receives event notification when a call change occurs. Only the application in charge (initialized with NM_INIT_CONTROL) of the NetMeeting user interface will receive these notifications.

  • This event sink should always return S_OK to the event source.
uNotify
Identifier of an event constant during a call. Constants include:
CONFN_CALL_FAILED | The call failed.
CONFN_CALL_IGNORED | The call was ignored (user selected "Ignore" or the pop-up dialog timed out).
CONFN_CALL_IN_CONFERENCE | The remote system is already in a conference.
CONFN_CALL_INCOMPATIBLE | The remote version of NetMeeting is not compatible with the local system.
CONFN_CALL_NEWER | The remote system is a newer version of NetMeeting than the local one.
CONFN_CALL_OLDER | The remote system is an older version of NetMeeting (for example, NetMeeting 2.1 calling NetMeeting 2.0 or 1.0).

Up Arrow Back to INmCallNotify Interface

Up Arrow Back to Call Object

Up Arrow Back to COM Object Listing

INmCallNotify::StateChanged

HRESULT StateChanged(
    [in] NM_CALL_STATE uState);

Indicates that the status of a call has changed.

  • This event sink should always return S_OK to the event source.
uState
NM_CALL_STATE that identifies the current state. Constants include:
NM_CALL_ACCEPTED | The call has been accepted.
NM_CALL_CANCELED | The call has been canceled. See the version change information in the comments at the end of this reference.
NM_CALL_INIT | The call is being initialized.
NM_CALL_INVALID | The call is invalid.
NM_CALL_REJECTED | The call was rejected or ignored. See the version change information in the comments at the end of this reference.
NM_CALL_RING | The incoming call is waiting for a response. (For more information, see INmCall::Accept and INmCall::Reject).
NM_CALL_SEARCH | The outgoing call is in the process of finding the destination address.
NM_CALL_WAIT | The outgoing call is waiting for a response from the remote system.

A Call object will not produce state change notifications after an NM_CALL_REJECTED, NM_CALL_ACCEPTED, or NM_CALL_CANCELED state occurs. The Call object may be released after one of these notifications.

A successful outgoing call moves through the following states, in this order: NM_CALL_INIT, NM_CALL_SEARCH, NM_CALL_WAIT, NM_CALL_ACCEPTED.

A successful incoming call moves through the following states, in this order: NM_CALL_INIT, NM_CALL_RING, NM_CALL_ACCEPTED.

For NetMeeting 2.1, the uState parameter received will be NM_CALL_CANCELED when an invalid computer name or address is passed to INmManager::CallConference or INmManager::CreateCall. Previous versions of NetMeeting resulted in NM_CALL_REJECTED for uState.

Up Arrow Back to INmCallNotify Interface

Up Arrow Back to Call Object

Up Arrow Back to COM Object Listing


Conference Object

The Conference object manages a conference.

The Conference object is instantiated with the INmManager::CreateConference method.

An application may instantiate any number of Conference objects, but only one may be active at any given time. The rest must be idle. An idle conference has no members and no channels, while an active conference will always have at least one member.

Successful completion of the INmManager::CreateCall, INmConference::Host, or INmCall::Accept methods will result in an NM_CONFERENCE_ACTIVE state for the Conference object.

Use the IEnumNmConference Interface interface to navigate through the currently instantiated Conference objects.

INmConference Interface
INmConferenceNotify Interface

Up Arrow Back to COM Object Reference

INmConference Interface

This interface manages channels and members and also maintains conference-specific information.

CreateDataChannel
EnumChannel
EnumMember
GetChannelCount
GetID
GetMemberCount
GetName
GetNmchCaps
GetState
GetTopProvider
Host
IsHosting
LaunchRemote
Leave

Up Arrow Back to Conference Object

INmConference::CreateDataChannel

HRESULT CreateDataChannel(
    [out] INmChannelData **ppChannel,
    [in] REFGUID rguid);

Provides a pointer to an INmChannelData Interface on a new Channel object. This Data Channel, identified by your application's globally unique identifier (GUID), can be used to transmit information between instances of your application running on each conference participant's computer.

  • Returns one of the following values:
    S_OK | Success.
    E_POINTER | ppChannel is an invalid pointer.
    E_INVALIDARG | The rguid parameter contains an invalid value.
    E_FAIL | The channel cannot be created, or internal resources are not available.
    E_OUTOFMEMORY | Memory could not be allocated to service the request.
ppChannel
Pointer to a pointer to the INmChannelData Interface on the new Channel object.
rguid
GUID of the Data Channel.

Typically, an application will have only one Data Channel and will use its own application GUID to identify the Channel. However, an application can create multiple Data Channels and identify each one with a different GUID.

The Using the NetMeeting Data Channel tutorial has more information on this subject.

For more information on creating GUIDs, see Inside OLE 2, by Kraig Brockschmidt.

Up Arrow Back to INmConference Interface

Up Arrow Back to Conference Object

Up Arrow Back to COM Object Listing

INmConference::EnumChannel

HRESULT EnumChannel(
    [out] IEnumNmChannel **ppEnum);

Returns an instance of the enumerator for the existing Channel objects in the conference. The IEnumNmChannel Interface methods can be used to manipulate this enumerator.

  • Returns one of the following values:
    S_OK | Success.
    E_POINTER | ppEnum is an invalid pointer.
    E_FAIL | Internal resources are not available.
    E_OUTOFMEMORY | Memory could not be allocated to service the request.
ppEnum
Pointer to a pointer to a Channel enumerator that can be used to enumerate all the Channels in this conference.

Up Arrow Back to INmConference Interface

Up Arrow Back to Conference Object

Up Arrow Back to COM Object Listing

INmConference::EnumMember

HRESULT EnumMember(
    [out] IEnumNmMember **ppEnum);

Provides an instance of the enumerator for the Member objects in the current conference. The IEnumNmMember Interface methods can be used to manipulate this enumerator.

  • Returns one of the following values:
    S_OK | Success.
    E_POINTER | ppEnum is an invalid pointer.
    E_FAIL | Internal resources are not available.
    E_OUTOFMEMORY | Memory could not be allocated to service the request.
ppEnum
Pointer to a pointer to the member enumerator.

Up Arrow Back to INmConference Interface

Up Arrow Back to Conference Object

Up Arrow Back to COM Object Listing

INmConference::GetChannelCount

HRESULT GetChannelCount(
    [out] ULONG *puCount);

Retrieves the current number of channels in the conference.

  • Returns one of the following values:
    S_OK | Success.
    E_POINTER | The puCount pointer is invalid.
    E_FAIL | Internal resources are not available.
    E_OUTOFMEMORY | Memory could not be allocated to service the request.
puCount
Pointer to a ULONG containing the number of channels in the conference.

Up Arrow Back to INmConference Interface

Up Arrow Back to Conference Object

Up Arrow Back to COM Object Listing

INmConference::GetID

HRESULT GetID(
    [out] ULONG *puID);

Retrieves the unique identifier of the Conference object. This method will only return an identifier if the Conference object has data capabilities.

  • Returns one of the following values:
    S_OK
    Success.
    E_POINTER
    The puID pointer is invalid.
    NM_E_NO_T120_CONFERENCE
    The conference is audio and video only, or the conference is idle (waiting for others to join).
puID
Pointer to a ULONG that contains the returned conference identifier.

Up Arrow Back to INmConference Interface

Up Arrow Back to Conference Object

Up Arrow Back to COM Object Listing

INmConference::GetMemberCount

HRESULT GetMemberCount(
    [out] ULONG *puCount);

Retrieves the current number of members in the conference.

  • Returns one of the following values:
    S_OK | Success.
    E_POINTER | The puCount pointer is invalid.
    E_FAIL | Internal resources are not available.
    E_OUTOFMEMORY | Memory could not be allocated to service the request.
puCount
Pointer to a ULONG containing the number of members.

Up Arrow Back to INmConference Interface

Up Arrow Back to Conference Object

Up Arrow Back to COM Object Listing

INmConference::GetName

HRESULT GetName(
    [out] BSTR *pbstrName);

Retrieves the string for the conference name.

  • Returns one of the following values:
    S_OK | Success.
    E_POINTER | The pbstrName pointer is invalid.
    E_FAIL | Internal resources are not available.
    E_OUTOFMEMORY | Memory could not be allocated to service the request.
pbstrName
Pointer to a BSTR that receives the string containing a conference name.

Up Arrow Back to INmConference Interface

Up Arrow Back to Conference Object

Up Arrow Back to COM Object Listing

INmConference::GetNmchCaps

HRESULT GetNmchCaps(
    [out] ULONG *puchCaps);

Retrieves the channel capabilities with which the Conference object was created. The capabilities define the channels for which the application will receive notifications.

  • Returns S_OK if successful, or E_POINTER if the puchCaps pointer is invalid.
puchCaps
Pointer to a ULONG that identifies the channel capabilities. This can be NMCH_ALL, NMCH_NONE, or any combination of the remaining channel type constants:
NMCH_AUDIO | Audio Channel capabilities.
NMCH_DATA | Data Channel capabilities.
NMCH_FT | File Transfer Channel capabilities.
NMCH_SHARE | Application Sharing Channel capabilities.
NMCH_VIDEO | Video Channel capabilities.

Up Arrow Back to INmConference Interface

Up Arrow Back to Conference Object

Up Arrow Back to COM Object Listing

INmConference::GetState

HRESULT GetState(
    [out] NM_CONFERENCE_STATE *pState);

Retrieves the state of the Conference object. Though an application may have any number of Conference objects instantiated, only one Conference object may be active at any given time.

  • Returns S_OK if successful, or E_POINTER if the pState pointer is invalid.
pState
Pointer to an NM_CONFERENCE_STATE that identifies the conference state as idle (NM_CONFERENCE_IDLE) or active (NM_CONFERENCE_ACTIVE).

Up Arrow Back to INmConference Interface

Up Arrow Back to Conference Object

Up Arrow Back to COM Object Listing

INmConference::GetTopProvider

HRESULT GetTopProvider(
    [out] INmMember **ppMember);

Retrieves the top provider, which is the member in charge of the conference.

  • Returns S_OK if successful, or E_POINTER if the ppMember pointer is invalid.
ppMember
Pointer to a pointer to the INmMember Interface on the top provider Member object.

If the top provider leaves the conference, the conference will end.

Up Arrow Back to INmConference Interface

Up Arrow Back to Conference Object

Up Arrow Back to COM Object Listing

INmConference::Host

HRESULT Host(void);

Activates a conference and makes the local user a member of the conference.

  • Returns one of the following values:
    S_OK | Success.
    E_FAIL | Conference is not idle.
    NM_E_NO_T120_CONFERENCE | Conference does not have data capabilities.

The conference must be in the idle state to be set as a host (state must be NM_CONFERENCE_IDLE).

The conference must have data capabilities to be a host (must have NMCH_DATA set). For more information, see INmManager::CreateConference.

This method ensures that the local user will be the top provider (member in charge of the conference).

This method has the same effect as choosing the "Host Meeting" menu item in NetMeeting.

A hosted conference will not end when the last remote participant leaves the conference.

Up Arrow Back to INmConference Interface

Up Arrow Back to Conference Object

Up Arrow Back to COM Object Listing

INmConference::IsHosting

HRESULT IsHosting(void);

Determines if the conference is being hosted by the local computer.

  • Returns S_OK if in host mode, or S_FALSE otherwise.

Up Arrow Back to INmConference Interface

Up Arrow Back to Conference Object

Up Arrow Back to COM Object Listing

INmConference::LaunchRemote

HRESULT LaunchRemote(
    [in] REFGUID rguid,
    [in] INmMember *pMember);

Starts the application associated with the specified globally unique identifier (GUID) on the remote member's system.

  • Returns S_OK if successful, or E_POINTER if pMember is an invalid pointer.
rguid
GUID of the calling application.
pMember
Pointer to the INmMember Interface on the remote Member object.

If pMember is NULL, NetMeeting attempts to start the remote application on all members in the conference.

In most cases, each application will have one Data Channel and the same GUID will be used to identify the Data Channel and the application. In some cases, an application may have multiple Data Channels, each identified with its own GUID. In this case, the application will use one of these GUIDs as its own launching GUID.

For more information, see the Remotely Launching Your Program tutorial.

Up Arrow Back to INmConference Interface

Up Arrow Back to Conference Object

Up Arrow Back to COM Object Listing

INmConference::Leave

HRESULT Leave(void);

Removes the local computer from the active conference.

  • Returns S_OK if successful, or E_FAIL if the conference is not active, the operation failed, or internal resources are not available.

If other computers are connected to the conference through this computer, they will also be disconnected. If the local user is the top provider (member in charge of the conference), the conference will end.

Up Arrow Back to INmConference Interface

Up Arrow Back to Conference Object

Up Arrow Back to COM Object Listing

INmConferenceNotify Interface

This is an event notification sink interface for the INmConference interface. The methods in this interface are called by the Conference object interface when specific events occur.

These event sink methods should be defined and implemented by the client application to respond to notifications from a Conference object. For example, the INmConferenceNotify::MemberChanged method is notified when the member roster for the Conference object has changed. The client application implementation of this method could provide a display to the user informing him or her of the addition or removal of the specific member.

ChannelChanged
MemberChanged
NmUI
StateChanged

Up Arrow Back to Conference Object

INmConferenceNotify::ChannelChanged

HRESULT ChannelChanged(
    [in] NM_CHANNEL_NOTIFY uNotify,
    [in] INmChannel *pChannel);

Notifies the client that a channel for the conference has changed.

  • This event sink should always return S_OK to the event source.
uNotify
Enumerated constant for the notification type. This can be one of the following:
NM_MEMBER_ADDED | A channel was added to the conference.
NM_MEMBER_REMOVED | A channel was removed from the conference.
NM_MEMBER_UPDATED | Information for a channel was updated.
pChannel
Pointer to the INmChannel Interface on the Channel object that was updated, added to, or removed from the conference.

Up Arrow Back to INmConferenceNotify Interface

Up Arrow Back to Conference Object

Up Arrow Back to COM Object Listing

INmConferenceNotify::MemberChanged

HRESULT MemberChanged(
    [in] NM_MEMBER_NOTIFY uNotify,
    [in] INmMember *pMember);

Notifies the client that the member roster for the conference has changed (someone has joined or left the conference or the member's capabilities has been updated).

  • This event sink should always return S_OK to the event source.
uNotify
Enumerated constant for the notification type. This can be one of the following:
NM_MEMBER_ADDED | A member was added to the conference.
NM_MEMBER_REMOVED | A member was removed from the conference.
NM_MEMBER_UPDATED | Information for a conference member was updated.
pMember
Pointer to the INmMember Interface on the Member object that was updated, added to, or removed from the conference.

Up Arrow Back to INmConferenceNotify Interface

Up Arrow Back to Conference Object

Up Arrow Back to COM Object Listing

INmConferenceNotify::NmUI

HRESULT NmUI(
    [in] CONFN uNotify);

Receives event notification when a conference change occurs.

  • This event sink should always return S_OK to the event source.
uNotify
Reserved for future use.

Up Arrow Back to INmConferenceNotify Interface

Up Arrow Back to Conference Object

Up Arrow Back to COM Object Listing

INmConferenceNotify::StateChanged

 HRESULT StateChanged(
        [in] NM_CONFERENCE_STATE uState);

Notifies the application when the conference state has changed.

  • This event sink should always return S_OK to the event source.
uState
New conference state. The state will be one of the following constants:
NM_CONFERENCE_ACTIVE | The conference is active. Most operations on a conference require it to be in this state.
NM_CONFERENCE_IDLE | The conference is not active. It contains no members or channels.
NM_CONFERENCE_INITIALIZING | The conference is transitioning between the idle and active states. The application should wait for a notification that the state has changed to either waiting or active before attempting to perform any other conference operations.
NM_CONFERENCE_WAITING | A hosted conference with only the local member participating.

Up Arrow Back to INmConferenceNotify Interface

Up Arrow Back to Conference Object

Up Arrow Back to COM Object Listing


Member Object

The Member object contains information about a participant in a conference.

Applications will receive notification through the INmConferenceNotify::MemberChanged method when a Member object has been created.

INmMember Interface

Up Arrow Back to COM Object Reference

INmMember Interface

This interface provides information on the participant in a conference.

Eject
GetAddr
GetConference
GetID
GetName
GetNmchCaps
GetNmVersion
GetShareState
GetUserData
IsMCU
IsSelf

Up Arrow Back to Member Object

INmMember::Eject

HRESULT Eject(void);

Removes a member from the conference. Only the top provider can remove a member from the conference.

  • Returns S_OK if the request to eject the member succeeded, or E_FAIL if:
    • The member is not in an active conference.
    • The member is not in the conference.
    • The local user is not the top provider.
    • The member to be removed is the local user.

Up Arrow Back to INmMember Interface

Up Arrow Back to Member Object

Up Arrow Back to COM Object Listing

INmMember::GetAddr

HRESULT GetAddr(
    [out] BSTR *pbstrAddr,
    [out] NM_ADDR_TYPE *puType);

Retrieves the address for the member, if available.

  • Returns one of the following values:
    S_OK | Success.
    E_POINTER | The pbstrAddr pointer is invalid.
    E_FAIL | Internal resources are not available.
pbstrAddr
Pointer to a BSTR that contains the local user's name or address.
puType
Pointer to an NM_ADDR_TYPE that identifies the type of the user name/address. This can be one of the following:
NM_ADDR_H323_GATEWAY | IP address of the gateway server and the phone number (www.xxx.yyy.zzz/number). Also see INmManager::CreateCall.
NM_ADDR_IP | IP address.
NM_ADDR_MACHINENAME | Machine name.
NM_ADDR_ULS | ILS server name and e-mail name. (server/e-mail).
NM_ADDR_UNKNOWN | Unknown type.

The address and type returned by this method are the address and type that were used when the member joined the conference.

Up Arrow Back to INmMember Interface

Up Arrow Back to Member Object

Up Arrow Back to COM Object Listing

INmMember::GetConference

HRESULT GetConference(
    [out] INmConference **ppConference);

Retrieves a pointer to the conference in which the member is participating.

  • Returns one of the following values:
    S_OK | Success.
    S_FALSE | No conference is available.
    E_POINTER | The ppConference pointer is invalid.
    E_FAIL | Internal resources are not available.
ppConference
Pointer to a pointer to the INmConference Interface on the Conference object in which this member is participating.

If this method returns S_OK, the application must call Release for ppConference.

Up Arrow Back to INmMember Interface

Up Arrow Back to Member Object

Up Arrow Back to COM Object Listing

INmMember::GetID

HRESULT GetID(
    [out] ULONG *puID);

Retrieves the unique identifier for the Member object.

  • Returns S_OK if successful, or E_POINTER if the puID pointer is invalid.
puID
Pointer to a ULONG that contains the member identifier.

This method is only valid when there is a data conference.

Up Arrow Back to INmMember Interface

Up Arrow Back to Member Object

Up Arrow Back to COM Object Listing

INmMember::GetName

HRESULT GetName(
    [out] BSTR *pbstrName);

Retrieves the string for the member name.

  • Returns S_OK if successful, or E_POINTER if pbstrName is an invalid pointer.
pbstrName
Pointer to a BSTR that contains the user's name, if available.

Up Arrow Back to INmMember Interface

Up Arrow Back to Member Object

Up Arrow Back to COM Object Listing

INmMember::GetNmchCaps

HRESULT GetNmchCaps(
    [out] ULONG *puchCaps);

Retrieves information about the channels in which this member is currently participating.

  • Returns S_OK if successful, or E_POINTER if the puchCaps pointer is invalid.
puchCaps
Pointer to a ULONG that identifies the channel capabilities. Constants may include any of the following, or none, in which case NMCH_NULL is returned.
NMCH_AUDIO | Audio channel.
NMCH_DATA | Data channel.
NMCH_FT | File Transfer channel.
NMCH_SHARE | Application Sharing channel.
NMCH_VIDEO | Video channel.

Up Arrow Back to INmMember Interface

Up Arrow Back to Member Object

Up Arrow Back to COM Object Listing

INmMember::GetNmVersion

HRESULT GetNmVersion(
    [out] ULONG *puVersion);

Retrieves the NetMeeting version number.

  • Returns S_OK if successful, or E_POINTER if the puVersion pointer is invalid.
puVersion
Pointer to a ULONG containing the current version of NetMeeting. This can be one of the following:
NM_VER_1 | = 1
NM_VER_2 | = 2
NM_VER_FUTURE | = 15
NM_VER_UNKNOWN | = 0

The version number is valid only when the member has data capabilities.

Up Arrow Back to INmMember Interface

Up Arrow Back to Member Object

Up Arrow Back to COM Object Listing

INmMember::GetShareState

HRESULT GetShareState(
    [out] NM_SHARE_STATE *puState);

Retrieves the current application sharing tate for a member.

  • Returns S_OK if successful, or E_POINTER if the puState pointer is invalid.
puState
Pointer to an NM_SHARE_STATE that identifies the current application sharing state. This can be one of the following:
NM_SHARE_COLLABORATING | The local user is not working alone and does not have control of the cursor. Other conference members can work in any applications the local user has shared.
NM_SHARE_IN_CONTROL | Gives the local user control of the cursor. If the user was working alone, this will also grant permission to others to take control of this shared application.
NM_SHARE_UNKNOWN | The current state is unknown. This may result if this is an audio- and video-only conference, or if application sharing is not available.
NM_SHARE_WORKING_ALONE | The local user is working alone. Other conference members can see applications that this user has shared, but they cannot work in them. The local user can see applications that others have shared, but he or she cannot work in them.

Up Arrow Back to INmMember Interface

Up Arrow Back to Member Object

Up Arrow Back to COM Object Listing

INmMember::GetUserData

HRESULT GetUserData(
    [in] REFGUID rguid,
    [out] BYTE **ppb,
    [out] ULONG *pcb);

Retrieves the private data associated with the globally unique identifier (GUID) for the member.

This method is not yet implemented.

  • Returns one of the following values:
    S_OK | Success.
    E_POINTER | The ppb or pcb pointer is invalid.
    E_INVALIDARG | The rguid parameter is invalid.
    E_FAIL | Internal resources are not available.
rguid
GUID of the data to be retrieved.
ppb
Pointer to a pointer to the data
pcb
Pointer to a ULONG that contains the size of the data pointed to by ppb.

Up Arrow Back to INmMember Interface

Up Arrow Back to Member Object

Up Arrow Back to COM Object Listing

INmMember::IsMCU

HRESULT IsMCU(void);

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

  • Returns S_OK if the Member object represents an MCU, or S_FALSE if it doesn't.

Up Arrow Back to INmMember Interface

Up Arrow Back to Member Object

Up Arrow Back to COM Object Listing

INmMember::IsSelf

HRESULT IsSelf(void);

Determines if the Member object represents the local user.

  • Returns S_OK if the Member object represents the local user, or S_FALSE if not.

Up Arrow Back to INmMember Interface

Up Arrow Back to Member Object

Up Arrow Back to COM Object Listing


Channel Object

The Channel object is used for general media channel manipulation. The Application Sharing, Audio, Data, File Transfer, and Video Channel objects inherit from the Channel object.

The INmConferenceNotify::ChannelChanged method will receive notification when a Channel object is instantiated.

INmChannel Interface
INmChannelNotify Interface

Up Arrow Back to COM Object Reference

INmChannel Interface

This interface is the base interface for all communication channel types, including audio, video, data, file transfer, and application sharing.

EnumMember
GetConference
GetInterface
GetMemberCount
GetNmch
IsActive
IsSameAs
SetActive

Up Arrow Back to Channel Object

INmChannel::EnumMember

HRESULT EnumMember(
    [out] IEnumNmMember **ppEnum);

Retrieves an instance of the enumerator for Member objects in this channel. The IEnumNmMember Interface methods can be used to manipulate this enumerator.

  • Returns one of the following values:
    S_OK | Success.
    E_POINTER | The ppEnum pointer is invalid.
    E_FAIL | Internal resources are not available.
    E_OUTOFMEMORY | Memory could not be allocated to service the request.
ppEnum
Pointer to a pointer to a member enumerator.

Up Arrow Back to INmChannel Interface

Up Arrow Back to Channel Object

Up Arrow Back to COM Object Listing

INmChannel::GetConference

HRESULT GetConference(
    [out] INmConference **ppConference);

Retrieves the Conference object to which the channel belongs.

  • Returns one of the following values:
    S_OK | Success.
    E_POINTER | The ppConference pointer is invalid.
    E_FAIL | An internal resource is not available.
ppConference
Pointer to a pointer to the INmConference Interface on the Conference object to which this channel belongs.

If this method returns S_OK, the application must call Release for the conference interface returned in ppConference.

Up Arrow Back to INmChannel Interface

Up Arrow Back to Channel Object

Up Arrow Back to COM Object Listing

INmChannel::GetInterface

HRESULT GetInterface(
    [out] IID *piid);

Obtains the channel-specific interface identifier.

  • Returns S_OK if successful, or E_POINTER if the piid pointer is invalid.
piid
Pointer to a buffer to receive the channel-specific interface identifier.

Up Arrow Back to INmChannel Interface

Up Arrow Back to Channel Object

Up Arrow Back to COM Object Listing

INmChannel::GetMemberCount

HRESULT GetMemberCount(
    [out] ULONG * puCount);

Retrieves the current number of members in the channel.

  • Returns one of the following values:
    S_OK | Success.
    E_POINTER | The puCount pointer is invalid.
    E_FAIL | Internal resources are not available.
puCount
Pointer to a ULONG containing the number of members.

Up Arrow Back to INmChannel Interface

Up Arrow Back to Channel Object

Up Arrow Back to COM Object Listing

INmChannel::GetNmch

HRESULT GetNmch(
    [out] ULONG *puCh);

Retrieves the channel type.

  • Returns S_OK if successful, or E_POINTER if the puCh pointer is invalid.
puCh
Pointer to a ULONG that identifies the channel type. This can be one of the following:
NMCH_AUDIO | Audio channel.
NMCH_DATA | Data channel.
NMCH_FT | File Transfer channel.
NMCH_SHARE | Application Sharing channel.
NMCH_VIDEO | Video channel.

Up Arrow Back to INmChannel Interface

Up Arrow Back to Channel Object

Up Arrow Back to COM Object Listing

INmChannel::IsActive

HRESULT IsActive(void);

Determines if the channel is active.

  • Returns S_OK if the channel is active, or S_FALSE if it is not.

If a channel is inactive, it is not currently transmitting information.

The behavior of an active channel depends on the specific channel type.

The INmChannel::SetActive method can be used to change this state for some channels.

Up Arrow Back to INmChannel Interface

Up Arrow Back to Channel Object

Up Arrow Back to COM Object Listing

INmChannel::IsSameAs

HRESULT IsSameAs(
    [in] INmChannel *pChannel);

Indicates whether two Channel objects represent the same channel.

  • Returns one of the following values:
    S_OK | Both Channel objects represent the same channel.
    S_FALSE | The two Channel objects do not represent the same channel.
    E_POINTER | The pChannel pointer is invalid.
pChannel
Pointer to the object to be compared to this Channel object.

Up Arrow Back to INmChannel Interface

Up Arrow Back to Channel Object

Up Arrow Back to COM Object Listing

INmChannel::SetActive

HRESULT SetActive(
    [in] BOOL fActive);

Sets the channel to active or inactive.

  • Returns S_OK if successful.
fActive
BOOL value that is TRUE to activate the channel or FALSE to deactivate it.

This method can only be used with the audio and video channels.

Applications must deactiveate all current audio channels before activating a new audio channel.

Up Arrow Back to INmChannel Interface

Up Arrow Back to Channel Object

Up Arrow Back to COM Object Listing

INmChannelNotify Interface

This is an event notification sink interface for the INmChannel interface. The methods in this interface are called by the Channel object when specific events occur.

These event sink methods should be defined and implemented by the client application to respond to notifications from a Channel object. For example, the INmChannelNotify::MemberChanged method is notified when a member of the channel is added, removed, or updated. The client application implementation of this method could provide a display to the user informing him or her of the addition, removal, or update of the specific member.

MemberChanged
NmUI

Up Arrow Back to Channel Object

INmChannelNotify::MemberChanged

HRESULT MemberChanged(
    [in] NM_MEMBER_NOTIFY uNotify,
    [in] INmMember *pMember);

Receives notification that a member of the channel was added, removed, or updated.

  • This event sink should always return S_OK to the event source.
uNotify
Identifier of an event constant during a conference. This can include the following values:
NM_MEMBER_ADDED | A member was added to the conference.
NM_MEMBER_REMOVED | A member was removed from the conference.
NM_MEMBER_UPDATED | Information for a conference member was updated.
pMember
Pointer to the INmMember Interface on the Member object that changed.

Up Arrow Back to INmChannelNotify Interface

Up Arrow Back to Channel Object

Up Arrow Back to COM Object Listing

INmChannelNotify::NmUI

HRESULT NmUI(
    [in] CONFN uNotify);

Receives event notification when a channel change occurs. Only the application in charge (initialized with NM_INIT_CONTROL) of the NetMeeting user interface will receive these notifications.

  • This event sink should always return S_OK to the event source.
uNotify
Reserved for future use.

This method will receive notifications only if the application succeeded in initializing with puOptions set to NM_INIT_CONTROL.

Up Arrow Back to INmChannelNotify Interface

Up Arrow Back to Channel Object

Up Arrow Back to COM Object Listing


Data Channel

The Data Channel object, which is derived from the Channel object, contains manipulation functions specific to data channels.

The Data Channel is instantiated with the INmConference::CreateDataChannel method.

Typically, an application will have only one Data Channel and will use its own globally unique identifier (GUID) to identify the channel. However, an application can create multiple Data Channels and identify each one with a different GUID.

The Using the NetMeeting Data Channel tutorial has more information on this subject.

For more information on creating GUIDs, see Inside OLE 2 by Kraig Brockschmidt.

INmChannelData Interface
INmChannelDataNotify Interface

Up Arrow Back to COM Object Reference

INmChannelData Interface

This interface manages the exchange of data between specific members. Data Channel objects are created with INmConference::CreateDataChannel.

In addition to the INmChannel Interface methods, this interface implements the following:

GetGuid
SendData

Up Arrow Back to Data Channel

INmChannelData::GetGuid

HRESULT GetGuid(
    [out] GUID *pguid);

Retrieves the globally unique identifier (GUID) used in the creation of the data channel (INmConference::CreateDataChannel).

  • Returns S_OK if successful, or E_POINTER if the pguid parameter contains an invalid value.
pguid
Pointer to the GUID that identifies a specific data channel.

Up Arrow Back to INmChannelData Interface

Up Arrow Back to Data Channel

Up Arrow Back to COM Object Listing

INmChannelData::SendData

HRESULT SendData(
    [in] INmMember *pMember,
    [in] ULONG uSize,
    [in] BYTE *pvBuffer,
    [in] ULONG uOptions);

Sends a block of data through the channel to a specified application on the designated member's computer.

  • Returns one of the following values:
    S_OK | Success.
    E_POINTER | The pvBuffer pointer is invalid, or uOptions contains an invalid option.
    E_NOINTERFACE | The pMember object does not have the required interface.
    E_FAIL | The specified data buffer was not sent, the specified member is no longer in the conference, or internal resources are not available.
    E_OUTOFMEMORY | Memory could not be allocated to service the request.
    S_FALSE | pvBuffer is NULL or uSize is zero.
pMember
Pointer to the INmMember Interface on the Member object to which data will be sent. If this parameter is NULL, the data is sent to all members in the channel.
uSize
Size, in bytes, of the data in the buffer.
pvBuffer
Pointer to a buffer that contains the data to be sent.
uOptions
Flags for data transfer. Reserved for future use. This flag should be set to 0.

Up Arrow Back to INmChannelData Interface

Up Arrow Back to Data Channel

Up Arrow Back to COM Object Listing

INmChannelDataNotify Interface

This is an event notification sink interface for the INmChannelData interface. The methods in this interface are called by the Data Channel object when specific events occur.

These event sink methods should be defined and implemented by the client application to respond to notifications from a Data Channel object. For example, the INmChannelDataNotify::DataReceived method is notified when data is received by the local computer. The client application implementation of this method could provide a display to the user informing him or her that the data has been received (including the size of the data, in bytes, which is provided by one of the method's parameters).

DataReceived
DataSent
MemberChanged
NmUI

Up Arrow Back to Data Channel

INmChannelDataNotify::DataReceived

HRESULT DataReceived(
    [in] INmMember *pMember,
    [in] ULONG uSize,
    [in] byte *pvBuffer,
    [in] ULONG dwFlags);

Receives a notification when data is received by the local computer.

  • This event sink should always return S_OK to the event source.
pMember
Pointer to the INmMember Interface on the Member object from which the data originated.
uSize
Size, in bytes, of the data in the buffer.
pvBuffer
Pointer to a buffer that contains the data received.
dwFlags
Flag that provides information on the transferred data. This can be one or more of the following:
NM_DF_BROADCAST | Data was broadcast to everyone.
NM_DF_PRIVATE | Data was private.
NM_DF_SEGMENT_BEGIN | Start of data block.
NM_DF_SEGMENT_END | End of data block.

The data buffer is valid only until the DataReceived method returns, at which point it is freed. To access information in the buffer after returning from the DataReceived method, copy the information to another buffer.

Up Arrow Back to INmChannelDataNotify Interface

Up Arrow Back to Data Channel

Up Arrow Back to COM Object Listing

INmChannelDataNotify::DataSent

HRESULT DataSent(
    [in] INmMember *pMember,
    [in] ULONG uSize,
    [in] byte *pvBuffer);

Receives a notification after the data is queued up to be sent.

  • This event sink should always return S_OK to the event source.
pMember
Pointer to the INmMember Interface on the Member object to which the data was sent. If the parameter is NULL, the data was sent to all members in the channel.
uSize
Size, in bytes, of the data in the buffer.
pvBuffer
Pointer to a buffer that contains the data that was sent.

Receipt of this notification indicates that NetMeeting has processed the INmChannelData::SendData request and handed the data off to lower level protocols for transmission. It does not guarantee that the data was transmitted or accepted by any remote computer.

Up Arrow Back to INmChannelDataNotify Interface

Up Arrow Back to Data Channel

Up Arrow Back to COM Object Listing

INmChannelDataNotify::MemberChanged

HRESULT MemberChanged(
    [in] NM_MEMBER_NOTIFY uNotify,
    [in] INmMember *pMember);

Receives notification that a member of the Data Channel was added, removed, or updated. This method is inherited from INmChannelNotify.

  • This event sink should always return S_OK to the event source.
uNotify
Identifier of an event constant during a conference. This can include the following values:
NM_MEMBER_ADDED | A member was added to the conference.
NM_MEMBER_REMOVED | A member was removed from the conference.
NM_MEMBER_UPDATED | Information for a conference member was updated.
pMember
Pointer to the INmMember Interface on the Member object that changed.

Up Arrow Back to INmChannelDataNotify Interface

Up Arrow Back to Data Channel

Up Arrow Back to COM Object Listing

INmChannelDataNotify::NmUI

HRESULT NmUI(
    [in] CONFN uNotify);

Receives event notification when a channel change occurs. Only the application in charge (initialized with NM_INIT_CONTROL) of the NetMeeting user interface will receive these notifications. This method is inherited from INmChannelNotify.

  • This event sink should always return S_OK to the event source.
uNotify
Reserved for future use.

Up Arrow Back to INmChannelDataNotify Interface

Up Arrow Back to Data Channel

Up Arrow Back to COM Object Listing


Audio Channel

The Audio Channel object is derived from the Channel object. The Audio Channel controls the sending and receiving of audio between the local computer and one other conference participant's computer.

NetMeeting 2.1 allows audio and video with only one other meeting participant at a time. Therefore, there can be only one active incoming Audio Channel and one active outgoing Audio Channel at any given time.

As in the NetMeeting user interface, audio and video can be switched between different conference members.

To obtain an Audio Channel, use INmChannel::QueryInterface with the IID_INmChannelAudio interface identifier.

INmChannelAudio Interface
INmChannelAudioNotify Interface

Up Arrow Back to COM Object Reference

INmChannelAudio Interface

This interface manages the exchange of audio information during a conference.

Before calling any of the INmChannelAudio methods listed below, users should confirm that NMCH_AUDIO is set by using INmSysInfo::GetNmchCaps.

In addition to the INmChannel Interface methods, this interface implements the following:

GetProperty
GetState
IsIncoming
SetProperty

Up Arrow Back to Audio Channel

INmChannelAudio::GetProperty

HRESULT GetProperty(
    [in] NM_AUDPROP uID,
    [out] ULONG *puValue);

Retrieves the property values of the current Audio Channel.

  • Returns S_OK if successful, or E_INVALIDARG if the uID or puValue parameter contains an invalid value.
uID
NM_AUDPROP that identifies the property type. This can be one of the following:
NM_AUDPROP_LEVEL | Audio level. puValue will receive values from 0 to 65535.
NM_AUDPROP_PAUSE | Audio muted. puValue will receive 0 if audio is not muted (default), or 1 if it is muted.
puValue
Pointer to a ULONG containing the audio property.

If an outgoing channel is paused, audio will not be sent. If an incoming channel is paused, audio will not be received.

Also see INmChannelAudio::SetProperty.

Up Arrow Back to INmChannelAudio Interface

Up Arrow Back to Audio Channel

Up Arrow Back to COM Object Listing

INmChannelAudio::GetState

HRESULT GetState(
    [out] NM_AUDIO_STATE *puState);

Retrieves the current state of an Audio Channel object.

  • Returns S_OK if successful, or E_POINTER if puState is an invalid pointer.
puState
Current state of an Audio Channel object. The state will be one of the following constants:
NM_AUDIO_IDLE | There is audio connection between the local and remote computers, but audio is not being sent or received.
NM_AUDIO_LOCAL_PAUSED | The channel is muted.
NM_AUDIO_TRANSFERRING | The channel is transmitting sound.

If the puState of an incoming channel is set to NM_AUDIO_LOCAL_PAUSED, the speaker is muted. If the puState of an outgoing channel is set to NM_AUDIO_LOCAL_PAUSED, the microphone is muted.

Up Arrow Back to INmChannelAudio Interface

Up Arrow Back to Audio Channel

Up Arrow Back to COM Object Listing

INmChannelAudio::IsIncoming

HRESULT IsIncoming(void);

Determines whether data on the Audio Channel is being sent or received.

  • Returns S_OK if the Audio Channel is incoming (through the speaker), or S_FALSE if it is outgoing (recording through the microphone input and sending to the remote member).

Up Arrow Back to INmChannelAudio Interface

Up Arrow Back to Audio Channel

Up Arrow Back to COM Object Listing

INmChannelAudio::SetProperty

HRESULT SetProperty(
    [in] NM_AUDPROP uID,
    [in] ULONG uValue);

Sets the property values of the Audio Channel.

  • Returns S_OK if successful, or E_INVALIDARG if the uID or uValue parameter contains an invalid value.
uID
NM_AUDPROP that identifies the property type. This can be one of the following:
NM_AUDPROP_LEVEL | Audio level. uValue must be a value from 0 to 65535.
NM_AUDPROP_PAUSE | Audio muted. uValue must be set to 0 to play audio (default), or 1 to mute audio.
uValue
Value of the audio property.

If an outgoing channel is paused, audio will not be sent. If an incoming channel is paused, audio will not be received.

Up Arrow Back to INmChannelAudio Interface

Up Arrow Back to Audio Channel

Up Arrow Back to COM Object Listing

INmChannelAudioNotify Interface

This is an event notification sink interface for the INmChannelAudio interface. The methods in this interface are called by the Audio Channel object when specific events occur.

These event sink methods should be defined and implemented by the client application to respond to notifications from an Audio Channel object. For example, the INmChannelAudioNotify::StateChanged method is notified when the state of the Audio Channel has changed. The client application implementation of this method could provide a display to the user informing him or her of this change.

MemberChanged
NmUI
PropertyChanged
StateChanged

Up Arrow Back to Audio Channel

INmChannelAudioNotify::MemberChanged

HRESULT MemberChanged(
    [in] NM_MEMBER_NOTIFY uNotify,
    [in] INmMember *pMember);

Receives notification that a member of the Audio Channel was added, removed, or updated. This method is inherited from INmChannelNotify. For NetMeeting 2.1, an Audio Channel will never have more than one member.

  • This event sink should always return S_OK to the event source.
uNotify
Identifier of an event constant. This can include the following values:
NM_MEMBER_ADDED | Another member has joined the Audio Channel.
NM_MEMBER_REMOVED | The remote user has been removed from the Audio Channel.
NM_MEMBER_UPDATED | The Audio Channel for this member has been updated.
pMember
Pointer to the INmMember Interface on the Member object that changed.

Up Arrow Back to INmChannelAudioNotify Interface

Up Arrow Back to Audio Channel

Up Arrow Back to COM Object Listing

INmChannelAudioNotify::NmUI

HRESULT NmUI(
    [in] CONFN uNotify);

Receives event notification when a channel change occurs. Only the application in charge (initialized with NM_INIT_CONTROL) of the NetMeeting user interface will receive these notifications.

This method is inherited from INmChannelNotify.

  • This event sink should always return S_OK to the event source.
uNotify
Reserved for future use.

Up Arrow Back to INmChannelAudioNotify Interface

Up Arrow Back to Audio Channel

Up Arrow Back to COM Object Listing

INmChannelAudioNotify::PropertyChanged

HRESULT PropertyChanged(
    [in] DWORD dwReserved);

Called when a property of the Audio Channel has changed.

  • This event sink should always return S_OK to the event source.
dwReserved
DWORD that identifies the property type.
NM_AUDPROP_PAUSE Audio mute state has changed.

This method is not called when NM_AUDPROP_LEVEL changes.

When receiving this notification, your application should use INmChannelAudio::GetProperty to determine the new property value.

Local or remote changes to the pause property for the channel will cause this notification to be called.

Up Arrow Back to INmChannelAudioNotify Interface

Up Arrow Back to Audio Channel

Up Arrow Back to COM Object Listing

INmChannelAudioNotify::StateChanged

HRESULT StateChanged(
    [in] NM_AUDIO_STATE uState);

Called when the Audio Channel's state changes.

  • This event sink should always return S_OK to the event source.
uState
NM_AUDIO_STATE that identifies the current state. Constants include:
NM_AUDIO_IDLE | There is audio connection between the local and remote computers, but audio is not being sent or received.
NM_AUDIO_LOCAL_PAUSED | The channel is muted.
NM_AUDIO_TRANSFERRING | The channel is transmitting sound.

Local or remote calls to INmChannelAudio::GetState can cause this notification to be called. Joining a call also causes this notification to be called.

Up Arrow Back to INmChannelAudioNotify Interface

Up Arrow Back to Audio Channel

Up Arrow Back to COM Object Listing


Video Channel

The Video Channel object, which is derived from the Channel object, contains manipulation functions specific to video channels.

NetMeeting 2.1 allows audio and video with only one other meeting participant at a time. Therefore, there can be only one active incoming Video Channel and one active outgoing Video Channel at any given time.

To obtain a Video Channel, use INmChannel::QueryInterface with the IID_INmChannelVideo interface identifier.

INmChannelVideo Interface
INmChannelVideoNotify Interface

Up Arrow Back to COM Object Reference

INmChannelVideo Interface

This interface manages the exchange of video information during a conference.

In addition to the INmChannel Interface methods, this interface implements the following:

GetProperty
GetState
IsIncoming
SetProperty

Up Arrow Back to Video Channel

INmChannelVideo::GetProperty

HRESULT GetProperty(
    [in] NM_VIDPROP uID,
    [out] ULONG *puValue);

Retrieves the display properties of the current Video Channel.

  • Returns one of the following:
    S_OK | Success.
    E_INVALIDARG | uID is invalid.
    E_POINTER | puValue is an invalid pointer.
uID
NM_VIDPROP that identifies the video property. Constants include:
NM_VIDPROP_PAUSE | Video pause state. puValue will receive 0 if it is not paused (default), or 1 if it is paused.
NM_VIDPROP_WINDOW_AUTO_SIZE | The size of the video window as a percent of the actual image size being received from the video camera. puValue will be a value from 0 (no autosize) to 400 (400 percent larger than actual size).
NM_VIDPROP_WINDOW_SIZE | The size of the video window. puValue's LOWORD will receive the width of the window size, and HIWORD will receive the height. Both values will be in pixels (from 0 to 32767).
NM_VIDPROP_WINDOW_POSITION | The position of the video window. puValue's LOWORD will receive the window's x-coordinate, and HIWORD will receive the y-coordinate. Both values will be in pixels (from -32768 to 32767).
NM_VIDPROP_WINDOW_TOP_MOST | Position of the video window relative to other windows. puValue will receive 0 if the window is not the topmost window, or 1 if the window is the topmost window.
NM_VIDPROP_WINDOW_VISIBLE | Visibility of the video window. puValue will receive 0 if the window is not visible, or 1 if the window is visible.
NM_VIDPROP_IMAGE_PREFERRED_SIZE | Size of the video window. puValue will receive one of the following:
NM_VIDEO_SMALL
NM_VIDEO_MEDIUM
NM_VIDEO_LARGE
NM_VIDPROP_IMAGE_QUALITY | Image quality of the video window. puValue will receive a value from 0 to 31 (31 = highest quality).
NM_VIDPROP_CAMERA_DIALOG | Dialogs supported by the capture device. puValue will receive one or both of the following constants:
NM_VIDEO_FORMAT_DIALOG
NM_VIDEO_SOURCE_DIALOG
puValue
Pointer to a ULONG containing the video property.

Up Arrow Back to INmChannelVideo Interface

Up Arrow Back to Video Channel

Up Arrow Back to COM Object Listing

INmChannelVideo::GetState

HRESULT GetState(
    [out] NM_VIDEO_STATE *puState);

Retrieves the state of the current Video Channel.

  • Returns S_OK if successful, or E_POINTER if puState is invalid.
puState
NM_VIDEO_STATE that identifies the current state. Constants include:
NM_VIDEO_BOTHPAUSED | The local and remote computers are connected with video, and they are both paused.
NM_VIDEO_IDLE | The local computer does not have a video connection to anyone, and it is not displaying local video.
NM_VIDEO_LOCALPAUSED | The local and remote computers are connected with video, but video is paused. The remote computer's video is not paused.
NM_VIDEO_PREVIEWING | The local computer does not have a video connection to anyone, but it is displaying local video.
NM_VIDEO_REMOTEPAUSED | The local and remote computers are connected with video, and the remote computer's video is paused.
NM_VIDEO_TRANSFERRING | The local and remote computers are connected with video, and neither computer is paused (video is being transferred between the two computers).

Up Arrow Back to INmChannelVideo Interface

Up Arrow Back to Video Channel

Up Arrow Back to COM Object Listing

INmChannelVideo::IsIncoming

HRESULT IsIncoming(void);

Determines if a video source is incoming (receiving) or outgoing (sending).

  • Returns S_OK if a video source is incoming, or S_FALSE if it is outgoing.

Up Arrow Back to INmChannelVideo Interface

Up Arrow Back to Video Channel

Up Arrow Back to COM Object Listing

INmChannelVideo::SetProperty

HRESULT SetProperty(
    [in] NM_VIDPROP uID,
    [in] ULONG uValue);

Sets the properties of the current Video Channel.

  • Returns S_OK if successful, or E_INVALIDARG if the uID or uValue parameter contains an invalid value.
uID
NM_VIDPROP that determines how uValue is interpreted. Constants include:
NM_VIDPROP_PAUSE | Video pause state. Set uValue to 0 to play (default), or 1 to pause.
NM_VIDPROP_WINDOW_AUTO_SIZE | Sets the size of the video window as a percent of the actual image size being received from the video camera. uValue may be a value from 0 (no autosize) to 400 (400 percent larger than actual size).
NM_VIDPROP_WINDOW_SIZE | Set uValue's LOWORD to the desired width of the window, and HIWORD to the desired height (both in pixels). Both values may be set from 0 to 32767.
NM_VIDPROP_WINDOW_POSITION | Set uValue's LOWORD to the desired x-coordinate, and HIWORD to the desired the y-coordinate. Both values must be in pixels (from -32768 to 32767).
NM_VIDPROP_WINDOW_TOP_MOST | Set uValue to 1 to set the video window as the topmost window, or 0 to set it as not topmost.
NM_VIDPROP_WINDOW_VISIBLE | Set uValue to 0 to hide the video window, or 1 to make it visible.
NM_VIDPROP_IMAGE_PREFERRED_SIZE | Set uValue to one of the following values to alter the video window's size:
NM_VIDEO_SMALL
NM_VIDEO_MEDIUM
NM_VIDEO_LARGE
NM_VIDPROP_IMAGE_QUALITY | Set uValue to a value from 0 to 31 (31 = highest quality) to alter the image quality.
NM_VIDPROP_CAMERA_DIALOG | Set the dialog used by the capture device by assigning one of the following values to uValue:
NM_VIDEO_FORMAT_DIALOG
NM_VIDEO_SOURCE_DIALOG
uValue
Value of the video property.

Up Arrow Back to INmChannelVideo Interface

Up Arrow Back to Video Channel

Up Arrow Back to COM Object Listing

INmChannelVideoNotify Interface

This is an event notification sink interface for the INmChannelVideo interface. The methods in this interface are called by the Video Channel object when specific events occur.

These event sink methods should be defined and implemented by the client application to respond to notifications from a Video Channel object. For example, the INmChannelVideoNotify::StateChanged method is notified when the state of the Video Channel has changed. The client application implementation of this method could provide a display to the user informing him or her of this change.

MemberChanged
NmUI
PropertyChanged
StateChanged

Up Arrow Back to Video Channel

INmChannelVideoNotify::MemberChanged

HRESULT MemberChanged(
    [in] NM_MEMBER_NOTIFY uNotify,
    [in] INmMember *pMember);

Receives notification that a member of the Video Channel was added, removed, or updated. This method is inherited from INmChannelNotify.

  • This event sink should always return S_OK to the event source.
uNotify
Identifier of an event constant during a conference.
NM_MEMBER_ADDED | A member was added to the conference.
NM_MEMBER_REMOVED | A member was removed from the conference.
NM_MEMBER_UPDATED | Information for a conference member was updated.
pMember
Pointer to the INmMember Interface on the Member object that changed.

Up Arrow Back to INmChannelVideoNotify Interface

Up Arrow Back to Video Channel

Up Arrow Back to COM Object Listing

INmChannelVideoNotify::NmUI

HRESULT NmUI(
    [in] CONFN uNotify);

Receives event notification when a channel change occurs. Only the application in charge (initialized with NM_INIT_CONTROL) of the NetMeeting user interface will receive these notifications. This method is inherited from INmChannelNotify.

  • This event sink should always return S_OK to the event source.
uNotify
Reserved for future use.

Up Arrow Back to INmChannelVideoNotify Interface

Up Arrow Back to Video Channel

Up Arrow Back to COM Object Listing

INmChannelVideoNotify::PropertyChanged

HRESULT PropertyChanged(
    [in] DWORD dwReserved);

Indicates that the video property has changed.

  • This event sink should always return S_OK to the event source.
dwReserved
Video property that changed. Possible properties include:
NM_VIDPROP_PAUSE | Pause state.
NM_VIDPROP_WINDOW_AUTO_SIZE | Size of the video window as a percentage of the actual image size received from the camera.
NM_VIDPROP_WINDOW_SIZE | Size of the video window.
NM_VIDPROP_WINDOW_POSITION | Position of the video window.
NM_VIDPROP_WINDOW_TOP_MOST | Whether or not the video window is the topmost window.
NM_VIDPROP_WINDOW_VISIBLE | Whether or not the video window is visible.
NM_VIDPROP_IMAGE_PREFERRED_SIZE | Size of the video window.
NM_VIDPROP_IMAGE_QUALITY | Quality of the video image.
NM_VIDPROP_CAMERA_DIALOG | Dialog used by the capture device.

When this event sink is notified, use INmChannelVideo::GetProperty to determine the new state of the property.

Up Arrow Back to INmChannelVideoNotify Interface

Up Arrow Back to Video Channel

Up Arrow Back to COM Object Listing

INmChannelVideoNotify::StateChanged

HRESULT StateChanged(
    [in] NM_VIDEO_STATE uState);

Indicates that the video state has changed.

  • This event sink should always return S_OK to the event source.
uState
NM_VIDEO_STATE that identifies the current state. Constants include:
NM_VIDEO_BOTHPAUSED | The local and remote computers are connected with video, and they are both paused.
NM_VIDEO_IDLE | The local computer does not have a video connection to anyone, and it is not displaying local video.
NM_VIDEO_LOCALPAUSED | The local and remote computers are connected with video, but video is paused. The remote computer's video is not paused.
NM_VIDEO_PREVIEWING | The local computer does not have a video connection to anyone, but it is displaying local video.
NM_VIDEO_REMOTEPAUSED | The local and remote computers are connected with video, and the remote computer's video is paused.
NM_VIDEO_TRANSFERRING | The local and remote computers are connected with video, and neither computer is paused (video is being transferred between the two computers).

Up Arrow Back to INmChannelVideoNotify Interface

Up Arrow Back to Video Channel

Up Arrow Back to COM Object Listing


File Transfer Channel

The File Transfer Channel object, which is derived from the Channel object, contains manipulation functions specific to file transfer channels.

To obtain a File Transfer Channel object, use INmChannel::QueryInterface with the IID_INmChannelFt interface identifier.

In addition to the INmChannel Interface methods, this interface implements the following:

INmChannelFt Interface
INmChannelFtNotify Interface

Up Arrow Back to COM Object Reference

INmChannelFt Interface

This interface manages the file exchange between members of a conference.

GetReceiveFileDir
SendFile
SetReceiveFileDir

Up Arrow Back to File Transfer Channel

INmChannelFt::GetReceiveFileDir

HRESULT GetReceiveFileDir(
    [out] BSTR *pbstrDir);

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

  • Returns one of the following values:
    S_OK | Success.
    E_POINTER | The pbstrDir pointer is invalid.
    E_FAIL | The operation failed, or internal resources are not available.
pbstrDir
Pointer to a BSTR for the path to the directory where a received file will be stored.

Up Arrow Back to INmChannelFt Interface

Up Arrow Back to File Transfer Channel

Up Arrow Back to COM Object Listing

INmChannelFt::SendFile

HRESULT SendFile(
    [out] INmFt **ppFt,
    [in] INmMember *pMember,
    [in] BSTR bstrFile,
    [in] ULONG uOptions);

Sends a file through the channel.

  • Returns one of the following values:
    S_OK | Success.
    E_POINTER | ppFt is an invalid pointer.
    E_INVALIDARG | The bstrFile string is invalid, or uOptions contains an invalid option.
    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.
ppFt
Pointer to a pointer to the INmFt Interface on the File object to be sent.
pMember
Pointer to the INmMember Interface on the Member object that will receive the file. This can be NULL if the file is sent to everyone.
bstrFile
BSTR containing the full path of the file to be sent.
uOptions
Reserved for future use. Should be set to 0.

Up Arrow Back to INmChannelFt Interface

Up Arrow Back to File Transfer Channel

Up Arrow Back to COM Object Listing

INmChannelFt::SetReceiveFileDir

HRESULT SetReceiveFileDir(
    [in] 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 string is invalid.
    E_FAIL | The operation failed, or internal resources are not available.
bstrDir
BSTR for the path to the directory where a received file will be stored.

Up Arrow Back to INmChannelFt Interface

Up Arrow Back to File Transfer Channel

Up Arrow Back to COM Object Listing

INmChannelFtNotify Interface

This is an event notification sink interface for the INmChannelFt interface. The method in this interface is called by the File Transfer Channel object when a specific event occurs.

This event sink method should be defined and implemented by the client application to respond to notifications from a File Transfer Channel object. The INmChannelFtNotify::FtUpdate method is notified when a change in the file transfer has occurred. The client application implementation of this method could provide the user with a display that indicates when the transfer is started, offered, canceled, or any of the other possible states.

FtUpdate
MemberChanged
NmUI

Up Arrow Back to File Transfer Channel

INmChannelFtNotify::FtUpdate

HRESULT FtUpdate(
    [in] CONFN uNotify,
    [in] INmFt *pFt);

Receives file transfer progress notifications.

  • This event sink should always return S_OK to the event source.
uNotify
Identifier of an event constant during a file transfer. Constants include:
CONFN_FT_CANCELED | A file transfer has been canceled.
CONFN_FT_COMPLETE | A file transfer is complete (this is the final notification for a given file transfer).
CONFN_FT_OFFERED | A file is being offered (reserved for future use).
CONFN_FT_PROGRESS | A file transfer has made some progress (applications should update their user interface).
CONFN_FT_STARTED | A file transfer has started (this is the first notification for a given transfer).
CONFN_FT_UI | Display the user interface for a file transfer (reserved for future use).
pFt
Pointer to the INmFt Interface on the File Transfer Channel that changed.

Up Arrow Back to INmChannelFtNotify Interface

Up Arrow Back to File Transfer Channel

Up Arrow Back to COM Object Listing

INmChannelFtNotify::MemberChanged

HRESULT MemberChanged(
    [in] NM_MEMBER_NOTIFY uNotify,
    [in] INmMember *pMember);

Receives notification that a member of the File Transfer channel was added, removed, or updated. This method is inherited from INmChannelNotify.

  • This event sink should always return S_OK to the event source.
uNotify
Identifier of an event constant during a conference. This can include the following values:
NM_MEMBER_ADDED | A member was added to the conference.
NM_MEMBER_REMOVED | A member was removed from the conference.
NM_MEMBER_UPDATED | Information for a conference member was updated.
pMember
Pointer to the INmMember Interface on the Member object that changed.

Up Arrow Back to INmChannelFtNotify Interface

Up Arrow Back to File Transfer Channel

Up Arrow Back to COM Object Listing

INmChannelFtNotify::NmUI

HRESULT NmUI(
    [in] CONFN uNotify);

Receives event notification when a channel change occurs. Only the application in charge (initialized with NM_INIT_CONTROL) of the NetMeeting user interface will receive these notifications. This method is inherited from INmChannelNotify.

  • This event sink should always return S_OK to the event source.
uNotify
Reserved for future use.

Up Arrow Back to INmChannelFtNotify Interface

Up Arrow Back to File Transfer Channel

Up Arrow Back to COM Object Listing


File Object

The File object manages information about a file being transferred.

The File object is instantiated with the INmChannelFt::SendFile method.

INmFt Interface

Up Arrow Back to COM Object Reference

INmFt Interface

This interface defines the file that will be transferred, including its transfer state, size, and owner.

Cancel
GetBytesTransferred
GetMember
GetName
GetSize
GetState
IsIncoming

Up Arrow Back to File Object

INmFt::Cancel

HRESULT Cancel(void);

Cancels the file transfer operation.

  • Returns S_OK if successful, or E_FAIL if not.

Up Arrow Back to INmFt Interface

Up Arrow Back to File Object

Up Arrow Back to COM Object Listing

INmFt::GetBytesTransferred

HRESULT GetBytesTransferred(
    [out] ULONG *puBytes);

Retrieves the current number of bytes transferred.

  • Returns S_OK if successful, or E_POINTER if the puBytes pointer is invalid.
puBytes
Pointer to a ULONG that contains the number of bytes transferred.

Up Arrow Back to INmFt Interface

Up Arrow Back to File Object

Up Arrow Back to COM Object Listing

INmFt::GetMember

HRESULT GetMember(
    [out] INmMember **ppMember);

Retrieves a pointer to information about the remote member of the file transfer based on one of the following conditions:

  • If incoming, it returns a pointer to the sending member.
  • If outgoing, it returns a pointer to the destination member.
  • If sent to everyone, it returns NULL.
  • Returns S_OK if successful, or E_POINTER if ppMember is an invalid pointer.
ppMember
Pointer to a pointer to the INmMember Interface on the Member object involved with the file transfer.

The Member object must be released once the application is through with it.

Up Arrow Back to INmFt Interface

Up Arrow Back to File Object

Up Arrow Back to COM Object Listing

INmFt::GetName

HRESULT GetName(
    [out] BSTR *pbstrName);

Retrieves the string for the full path of the file.

  • Returns one of the following values:
    S_OK | Success.
    E_POINTER | pbstrName is an invalid pointer.
    E_FAIL | Internal resources are not available.
    E_OUTOFMEMORY | Memory could not be allocated to service the request.
pbstrName
Pointer to a BSTR for the full path of the file.

Up Arrow Back to INmFt Interface

Up Arrow Back to File Object

Up Arrow Back to COM Object Listing

INmFt::GetSize

HRESULT GetSize(
    [out] ULONG *puBytes);

Retrieves the size of the file, in bytes.

  • Returns S_OK if successful, or E_POINTER if puBytes is an invalid pointer.
puBytes
Pointer to a ULONG that contains the size of the file, in bytes.

Up Arrow Back to INmFt Interface

Up Arrow Back to File Object

Up Arrow Back to COM Object Listing

INmFt::GetState

HRESULT GetState(
    [out] NM_FT_STATE *uState);

Retrieves the state of the file being transferred.

  • Returns S_OK if successful, or E_POINTER if uState is an invalid pointer.
uState
Pointer to the state of the file being transferred. Possible constants include:
NM_FT_COMPLETE | The file transfer is complete.
NM_FT_INVALID | The file transfer is not valid.
NM_FT_RECEIVING | The file transfer is currently being received.
NM_FT_SENDING | The file transfer is currently being sent.

Note that the NM_FT_COMPLETE value simply represents completion of the operation. The operation might have finished due to success, cancellation, or failure.

Up Arrow Back to INmFt Interface

Up Arrow Back to File Object

Up Arrow Back to COM Object Listing

INmFt::IsIncoming

HRESULT IsIncoming(
    void);

Determines whether the current File object is being transferred to the local computer.

  • Returns one of the following:
    S_OK | The file is being transferred to the local computer. The INmFt::GetMember method may be used to determine who sent the file.
    S_FALSE | The file is being transferred from the local computer. The INmFt::GetMember method may be used to determine the destination. Note that INmFt::GetMember may return a NULL value if the file was broadcast to everyone.

Up Arrow Back to INmFt Interface

Up Arrow Back to File Object

Up Arrow Back to COM Object Listing


Application Sharing Channel

The Application Sharing Channel object, which is derived from the Channel object, contains manipulation functions specific to Application Sharing Channels.

To obtain an Application Sharing Channel, use INmChannel::QueryInterface with the IID_INmChannelAppShare interface identifier.

Each Application Sharing Channel object refers to an application on the local computer that is capable of being shared or is currently being shared.

INmChannelAppShare Interface
INmChannelAppShareNotify Interface

Up Arrow Back to COM Object Reference

INmChannelAppShare Interface

This interface enables you to find the current sharing state of the local computer and get information about sharable applications.

In addition to the INmChannel Interface methods, this interface implements the following:

EnumSharableApp
GetState
SetState

Up Arrow Back to Application Sharing Channel

INmChannelAppShare::EnumSharableApp

HRESULT EnumSharableApp(
    [out] IEnumNmSharableApp **ppEnum);

Retrieves an instance of the Application Sharing Channel object enumerator for applications that can be shared. The IEnumNmSharableApp Interface methods can be used to manipulate this enumerator.

  • Returns S_OK if successful, or E_POINTER if ppEnum is an invalid pointer.
ppEnum
Pointer to a pointer to the enumerator for existing Application Sharing Channel objects.

Up Arrow Back to INmChannelAppShare Interface

Up Arrow Back to Application Sharing Channel

Up Arrow Back to COM Object Listing

INmChannelAppShare::GetState

HRESULT GetState(
    [out] NM_SHARE_STATE *puState);

Retrieves the state of the application being shared.

  • Returns S_OK if successful, or E_POINTER if the puState pointer is invalid.
puState
NM_SHARE_STATE that identifies the state of the local user. Possible constants include:
NM_SHARE_COLLABORATING | The user is not working alone and does not have control of the cursor. Other conference members can work in any applications the local user has shared.
NM_SHARE_UNKNOWN | The current state is unknown. This may result if it is an audio- and video-only conference, or if application sharing is not available.
NM_SHARE_IN_CONTROL | Gives the local user control of the cursor. If the user was working alone, this will also grant permission to others to take control of this shared application.
NM_SHARE_WORKING_ALONE | The local user is working alone. Other conference members can see applications that the local user has shared, but they cannot work in them. The local user can see applications that others have shared, but he or she cannot work in them.

Up Arrow Back to INmChannelAppShare Interface

Up Arrow Back to Application Sharing Channel

Up Arrow Back to COM Object Listing

INmChannelAppShare::SetState

HRESULT SetState(
    [in] NM_SHARE_STATE uState);

Sets the application sharing state of the local user.

  • Returns S_OK if successful, or E_FAIL if uState is not NM_SHARE_IN_CONTROL or NM_SHARE_WORKING_ALONE.
uState
NM_SHARE_STATE that identifies the state of the shared application. For NetMeeting 2.1, possible constants include:
NM_SHARE_IN_CONTROL | Gives the local user control of the cursor. If the user was working alone, this will also grant permission to others to take control of this shared application.
NM_SHARE_WORKING_ALONE | The local user is working alone. Other conference members can see applications that the local user has shared, but they cannot work in them. The local user can see applications that others have shared, but he or she cannot work in them.

When you set the current state to NM_SHARE_IN_CONTROL, this interface does the same thing as the Collaborate button in the NetMeeting UI; the user is put in the Collaborating state and is given control of the cursor.

Calling this method and setting the NM_SHARE_IN_CONTROL constant for uState will not result in a INmChannelNotify::MemberChanged notification if the local user was already in control, or if all users are working alone.

Up Arrow Back to INmChannelAppShare Interface

Up Arrow Back to Application Sharing Channel

Up Arrow Back to COM Object Listing

INmChannelAppShareNotify Interface

This is an event notification sink interface for the . The methods in this interface are called by the Application Sharing Channel when a specific event occurs.

This event sink method should be defined and implemented by the client application to respond to notifications from an Application Sharing Channel. The INmChannelAppShareNotify::StateChanged method is notified when a change in the application sharing state has occurred. The client application implementation of this method could provide the user with a display that indicates an application has just been shared or is no longer being shared.

MemberChanged
NmUI
StateChanged

Up Arrow Back to Application Sharing Channel

INmChannelAppShareNotify::MemberChanged

HRESULT MemberChanged(
    [in] NM_MEMBER_NOTIFY uNotify,
    [in] INmMember *pMember);

Receives notification that a member of the Application Sharing Channel was added, removed, or updated. This method is inherited from INmChannelNotify.

  • This event sink should always return S_OK to the event source.
uNotify
Identifier of an event constant during a conference. This can include the following values:
NM_MEMBER_ADDED | A member was added to the conference.
NM_MEMBER_REMOVED | A member was removed from the conference.
NM_MEMBER_UPDATED | Information for a conference member was updated.
pMember
Pointer to the INmMember Interface on the Member object that changed.

Up Arrow Back to INmChannelAppShareNotify Interface

Up Arrow Back to Application Sharing Channel

Up Arrow Back to COM Object Listing

INmChannelAppShareNotify::NmUI

HRESULT NmUI(
    [in] CONFN uNotify);

Receives event notification when a channel change occurs. Only the application in charge (initialized with NM_INIT_CONTROL) of the NetMeeting user interface will receive these notifications. This method is inherited from INmChannelNotify.

  • This event sink should always return S_OK to the event source.
uNotify
Identifier of an event constant during a conference. Values include:
CONFN_CLICK_CONTROL | The mouse moved while collaborating, but the local user is not in control.
CONFN_CLICK_OBSCURE | The mouse clicked over an obscured area of the shared application.
CONFN_CLICK_REMOTE_NOT_COLLABORATING | Remote computer is not collaborating.
CONFN_CLICK_LOCAL_NOT_COLLABORATING | Local computer is not collaborating.

This method will receive notifications only if the application succeeded in initializing with puOptions set to NM_INIT_CONTROL.

Up Arrow Back to INmChannelAppShareNotify Interface

Up Arrow Back to Application Sharing Channel

Up Arrow Back to COM Object Listing

INmChannelAppShareNotify::StateChanged

HRESULT StateChanged(
    [in] NM_SHAPP_STATE uState,
    [in] INmSharableApp *pApp);

Provides notification when a shareable application on the local computer becomes shared or is no longer being shared.

  • This event sink should always return S_OK to the event source.
uState
Identifier of an NM_SHAPP_STATE. Constants include:
NM_SHAPP_NOT_SHARED | The application is not currently being shared.
NM_SHAPP_SHARED | The application is currently being shared.
pApp
Pointer to the INmSharableApp Interface on the Application Sharing Channel object that changed.

Up Arrow Back to INmChannelAppShareNotify Interface

Up Arrow Back to Application Sharing Channel

Up Arrow Back to COM Object Listing


Application Object

The Application object manages information about an application that is being shared.

INmSharableApp Interface

Up Arrow Back to COM Object Reference

INmSharableApp Interface

This interface defines the Application object. This interface enables you to obtain the sharable application's window and window title and also to manage its sharing state.

GetHwnd
GetName
GetState
SetState

Up Arrow Back to Application Object

INmSharableApp::GetHwnd

 HRESULT GetHwnd(
    [out] HWND *phwnd);

Retrieves the main window handle to the application.

  • Returns S_OK if successful, or an error message otherwise.
phwnd
Pointer to a window handle.

Up Arrow Back to INmSharableApp Interface

Up Arrow Back to Application Object

Up Arrow Back to COM Object Listing

INmSharableApp::GetName

HRESULT GetName(
    [out] BSTR *pbstrName);

Retrieves the title string for the application's main window.

  • Returns one of the following values:
    S_OK | Success.
    E_POINTER | pbstrName is an invalid pointer.
    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
Pointer to a BSTR that contains the shared application's name.

Up Arrow Back to INmSharableApp Interface

Up Arrow Back to Application Object

Up Arrow Back to COM Object Listing

INmSharableApp::GetState

HRESULT GetState(
    [out] NM_SHAPP_STATE *puState);

Retrieves the current state of the application.

  • Returns one of the following values:
    S_OK | Success.
    E_POINTER | puState is an invalid pointer.
    E_FAIL | The application no longer exists, or internal resources are not available.
    E_OUTOFMEMORY | Memory could not be allocated to service the request.
puState
Pointer to an NM_SHAPP_STATE that identifies the shared application state. Possible constants include:
NM_SHAPP_NOT_SHARED | The application is not currently being shared.
NM_SHAPP_SHARED | The application is currently being shared.

Up Arrow Back to INmSharableApp Interface

Up Arrow Back to Application Object

Up Arrow Back to COM Object Listing

INmSharableApp::SetState

HRESULT SetState(
    [in] NM_SHAPP_STATE uState);

Sets the state of the shared application.

  • Returns one of the following values:
    S_OK | Success.
    E_FAIL | The application no longer exists, or internal resources are not available.
    E_OUTOFMEMORY | Memory could not be allocated to service the request.
uState
NM_SHAPP_STATE that identifies the shared application state. Possible constants include:
NM_SHAPP_NOT_SHARED | The application is not being shared.
NM_SHAPP_SHARED | The application is being shared.

The INmChannelAppShareNotify::StateChanged notification sink will be called when the application's sharing state changes.

Up Arrow Back to INmSharableApp Interface

Up Arrow Back to Application Object

Up Arrow Back to COM Object Listing


Enumerator Definitions

This section defines enumerator interfaces that take a snapshot of the current state.

IEnumNmConference Interface
IEnumNmMember Interface
IEnumNmChannel Interface
IEnumNmCall Interface
IEnumNmSharableApp Interface

Up Arrow Back to COM Object Reference

IEnumNmConference Interface

This enumerator interface enables you to access the list of available Conference objects. This enumerator list is instantiated with the INmManager::EnumConference method. When instantiated, the Reset method is automatically called on the list.

Clone
Reset
Next
Skip

Up Arrow Back to Enumerator Definitions

IEnumNmConference::Clone

HRESULT Clone(
    [out] IEnumNmConference **ppEnum);

Creates a duplicate enumerator containing the same enumeration state as the current one.

  • Returns S_OK if successful, or E_POINTER if ppEnum is an invalid pointer.
ppEnum
Duplicate of the enumerator.

Up Arrow Back to IEnumNmConference Interface

Up Arrow Back to Enumerators

Up Arrow Back to COM Object Listing

IEnumNmConference::Next

HRESULT Next(
    [in] ULONG cConference,
    [out] INmConference **rgpConference,
    [out] ULONG *pcFetched);

Retrieves the specified number of IEnumNmConference interfaces in the enumeration sequence.

  • Returns one of the following values:
    S_OK | Successful.
    E_POINTER | The rgpConference pointer is invalid.
    S_FALSE | There are no more IEnumNmConference interfaces to retrieve.
    E_INVALIDARG | pcFetched is NULL but cConference is not 1.
cConference
Number of IEnumNmConference interfaces to place in the rgpConference array.
rgpConference
Array in which to place IEnumNmConference interfaces.
pcFetched
Actual number of IEnumNmConference interfaces placed in the array. This may be set to NULL, in which case cConference must be 1.

The interfaces returned by this method have had their reference count incremented. The application should call the Release method on the interfaces to decrement the reference count when it has finished using the interfaces.

Up Arrow Back to IEnumNmConference Interface

Up Arrow Back to Enumerators

Up Arrow Back to COM Object Listing

IEnumNmConference::Reset

HRESULT Reset();

Resets the enumeration sequence to the beginning.

  • Returns S_OK if successful.

This method affects the return value of the next call to the IEnumNmConference::Next method.

Up Arrow Back to IEnumNmConference Interface

Up Arrow Back to Enumerators

Up Arrow Back to COM Object Listing

IEnumNmConference::Skip

HRESULT Skip(
    [in] ULONG cConference);

Skips a specified number of Conferences in the enumeration sequence.

  • Returns one of the following values:
    S_OK | Success.
    E_INVALIDARG | cConference is zero.
    S_FALSE | The cConference value exceeds the number of Conferences remaining in the enumeration.
cConference
Number of Conferences to skip.

This method affects the return value of the next call to the IEnumNmConference::Next method.

Up Arrow Back to IEnumNmConference Interface

Up Arrow Back to Enumerators

Up Arrow Back to COM Object Listing

IEnumNmMember Interface

This enumerator interface enables you to access the list of Member objects. This enumerator is instantiated with the INmConference::EnumMember method or the INmChannel::EnumMember method. When instantiated, the Reset method is automatically called on the list.

Clone
Next
Reset
Skip

Up Arrow Back to Enumerator Definitions

IEnumNmMember::Clone

HRESULT Clone(
    [out] IEnumNmMember **ppEnum);

Creates a duplicate enumerator containing the same enumeration state as the current one.

  • Returns S_OK if successful, or E_POINTER if ppEnum is an invalid pointer.
ppEnum
Duplicate of the enumerator.

Up Arrow Back to IEnumNmMember Interface

Up Arrow Back to Enumerators

Up Arrow Back to COM Object Listing

IEnumNmMember::Next

HRESULT Next(
    [in] ULONG cMember,
    [out] INmMember **rgpMember,
    [out] ULONG *pcFetched);

Retrieves the specified number of IEnumNmMember interfaces in the enumeration sequence.

  • Returns one of the following values:
    S_OK | Successful.
    E_POINTER | The rgpMember pointer is invalid.
    S_FALSE | There are no more Member objects to retrieve.
    E_INVALIDARG | pcFetched is NULL but cMember is not 1.
cMember
Number of IEnumNmMember interfaces to place in the rgpMember array.
rgpMember
Array in which to place IEnumNmMember interfaces.
pcFetched
Actual number of IEnumNmMember interfaces placed in the array. This may be set to NULL, in which case cMember must be 1.

The interfaces returned by this method have had their reference count incremented. The application should call the Release method on the interfaces to decrement the reference count when it is finished using the interfaces.

Up Arrow Back to IEnumNmMember Interface

Up Arrow Back to Enumerators

Up Arrow Back to COM Object Listing

IEnumNmMember::Reset

HRESULT Reset();

Resets the enumeration sequence to the beginning.

  • Returns S_OK if successful.

This method affects the return value of the next call to the IEnumNmMember::Next method.

Up Arrow Back to IEnumNmMember Interface

Up Arrow Back to Enumerators

Up Arrow Back to COM Object Listing

IEnumNmMember::Skip

HRESULT Skip(
    [in] ULONG cMember);

Skips a specified number of Member objects in the enumeration sequence.

  • Returns one of the following values:
    S_OK | Success.
    E_INVALIDARG | cMember is zero.
    S_FALSE | The cMember value exceeds the number of Members remaining in the enumeration.
cMember
Number of Member objects to skip.

This method affects the return value of the next call to the IEnumNmMember::Next method.

Up Arrow Back to IEnumNmMember Interface

Up Arrow Back to Enumerators

Up Arrow Back to COM Object Listing

IEnumNmChannel Interface

This enumerator interface enables you to access the list of Channel objects. This enumerator is instantiated with the INmConference::EnumChannel method. When instantiated, the Reset method is automatically called on the list.

This interface is useful for locating specific channels in a conference.

Clone
Next
Reset
Skip

Up Arrow Back to Enumerator Definitions

IEnumNmChannel::Clone

HRESULT Clone(
    [out] IEnumNmChannel **ppEnum);

Creates a duplicate enumerator containing the same enumeration state as the current one.

  • Returns S_OK if successful, or E_POINTER if ppEnum is an invalid pointer.
ppEnum
Duplicate of the enumerator.

Up Arrow Back to IEnumNmChannel Interface

Up Arrow Back to Enumerators

Up Arrow Back to COM Object Listing

IEnumNmChannel::Next

HRESULT Next(
    [in] ULONG cChannel,
    [out] INmChannel **rgpChannel,
    [out] ULONG *pcFetched);

Retrieves the specified number of IEnumNmChannel interfaces in the enumeration sequence.

  • Returns one of the following values:
    S_OK | Successful.
    E_POINTER | The rgpChannel pointer is invalid.
    S_FALSE | There are no more Channel objects to retrieve.
    E_INVALIDARG | pcFetched is NULL but cChannel is not 1.
cChannel
Number of IEnumNmChannel interfaces to place in the rgpChannel array.
rgpChannel
Array in which to place IEnumNmChannel interfaces.
pcFetched
Actual number of IEnumNmChannel interfaces placed in the array. This may be set to NULL, in which case cChannel must be 1.

The interfaces returned by this method have had their reference count incremented. The application should call the Release method on the interfaces to decrement the reference count when it has finished using the interfaces.

Up Arrow Back to IEnumNmChannel Interface

Up Arrow Back to Enumerators

Up Arrow Back to COM Object Listing

IEnumNmChannel::Reset

HRESULT Reset();

Resets the enumeration sequence to the beginning.

  • Returns S_OK if successful.

This method affects the return value of the next call to the IEnumNmChannel::Next method.

Up Arrow Back to IEnumNmChannel Interface

Up Arrow Back to Enumerators

Up Arrow Back to COM Object Listing

IEnumNmChannel::Skip

HRESULT Skip(
    [in] ULONG cChannel);

Skips a specified number of Channel objects in the enumeration sequence.

  • Returns one of the following values:
    S_OK | Success.
    E_INVALIDARG | cChannel is zero.
    S_FALSE | The cChannel value exceeds the number of Channels remaining in the enumeration.
cChannel
Number of Channels to skip.

This method affects the return value of the next call to the IEnumNmChannel::Next method.

Up Arrow Back to IEnumNmChannel Interface

Up Arrow Back to Enumerators

Up Arrow Back to COM Object Listing

IEnumNmCall Interface

This enumerator interface enables you to access the list of Call objects being managed by the Conference Manager. This enumerator is instantiated with the INmManager::EnumCall method. When instantiated, the Reset method is automatically called on the list.

Clone
Next
Reset
Skip

Up Arrow Back to Enumerator Definitions

IEnumNmCall::Clone

HRESULT Clone(
    [out] IEnumNmCall **ppEnum);

Creates a duplicate enumerator containing the same enumeration state as the current one.

  • Returns S_OK if successful, or E_POINTER if ppEnum is an invalid pointer.
ppEnum
Duplicate of the enumerator.

Up Arrow Back to IEnumNmCall Interface

Up Arrow Back to Enumerators

Up Arrow Back to COM Object Listing

IEnumNmCall::Next

HRESULT Next(
    [in] ULONG cCall,
    [out] INmCall **rgpCall,
    [out] ULONG *pcFetched);

Retrieves the specified number of IEnumNmCall interfaces in the enumeration sequence.

  • Returns one of the following values:
    S_OK | Successful.
    E_POINTER | The rgpCall pointer is invalid.
    S_FALSE | There are no more Call objects to retrieve.
    E_INVALIDARG | pcFetched is NULL but cCall is not 1.
cCall
Number of IEnumNmCall interfaces to place in the rgpCall array.
rgpCall
Array in which to place IEnumNmCall interfaces.
pcFetched
Actual number of IEnumNmCall interfaces placed in the array. This may be set to NULL, in which case cCall must be 1.

The interfaces returned by this method have had their reference count incremented. The application should call the Release method on the interfaces to decrement the reference count when it is finished using the interfaces.

Up Arrow Back to IEnumNmCall Interface

Up Arrow Back to Enumerators

Up Arrow Back to COM Object Listing

IEnumNmCall::Reset

HRESULT Reset();

Resets the enumeration sequence to the beginning.

  • Returns S_OK if successful.

This method affects the return value of the next call to the IEnumNmCall::Next method.

Up Arrow Back to IEnumNmCall Interface

Up Arrow Back to Enumerators

Up Arrow Back to COM Object Listing

IEnumNmCall::Skip

HRESULT Skip(
    [in] ULONG cCall);

Skips a specified number of Call objects in the enumeration sequence.

  • Returns one of the following values:
    S_OK | Success.
    E_INVALIDARG | cCall is zero.
    S_FALSE | The cCall value exceeds the number of IEnumNmCall interfaces remaining in the enumeration.
cCall
Number of Call objects to skip.

This method affects the return value of the next call to the IEnumNmCall::Next method.

Up Arrow Back to IEnumNmCall Interface

Up Arrow Back to Enumerators

Up Arrow Back to COM Object Listing

IEnumNmSharableApp Interface

This enumerator interface enables you to access the list of Shareable Applications in a conference. This enumerator is instantiated with the INmChannelAppshare::EnumEnumSharableApp method. When instantiated, the Reset method is automatically called on the list.

Clone
Next
Reset
Skip

Up Arrow Back to Enumerator Definitions

IEnumNmSharableApp::Clone

HRESULT Clone(
    [out] IEnumNmSharableApp **ppEnum);

Creates a duplicate enumerator containing the same enumeration state as the current one.

  • Returns S_OK if successful, or E_POINTER if ppEnum is an invalid pointer.
ppEnum
Duplicate of the enumerator.

Up Arrow Back to IEnumNmSharableApp Interface

Up Arrow Back to Enumerators

Up Arrow Back to COM Object Listing

IEnumNmSharableApp::Next

HRESULT Next(
    [in] ULONG cApp,
    [out] INmSharableApp **rgpApp,
    [out] ULONG *pcFetched);

Retrieves the specified number of IEnumNmSharableApp interfaces in the enumeration sequence.

  • Returns one of the following values:
    S_OK | Successful.
    E_POINTER | The rgpApp pointer is invalid.
    S_FALSE | There are no more Shareable Application objects to retrieve.
    E_INVALIDARG | pcFetched is NULL but cApp is not 1.
cApp
Number of IEnumNmSharableApp interfaces to place in the rgpApp array.
rgpApp
Array in which to place IEnumNmSharableApp interfaces.
pcFetched
Actual number of IEnumNmSharableApp interfaces placed in the array. This may be set to NULL, in which case cApp must be 1.

The interfaces returned by this method have had their reference count incremented. The application should call the Release method on the interfaces to decrement the reference count when it is finished using the interfaces.

Up Arrow Back to IEnumNmSharableApp Interface

Up Arrow Back to Enumerators

Up Arrow Back to COM Object Listing

IEnumNmSharableApp::Reset

HRESULT Reset();

Resets the enumeration sequence to the beginning.

  • Returns S_OK if successful.

This method affects the return value of the next call to the IEnumNmSharableApp::Next method.

Up Arrow Back to IEnumNmSharableApp Interface

Up Arrow Back to Enumerators

Up Arrow Back to COM Object Listing

IEnumNmSharableApp::Skip

HRESULT Skip(
    [in] ULONG cApp);

Skips a specified number of Shareable Application objects in the enumeration sequence.

  • Returns one of the following values:
    S_OK | Success.
    E_INVALIDARG | cApp is zero.
    S_FALSE | The cApp value exceeds the number of Shareable Applications remaining in the enumeration.
cApp
Number of Application objects to skip.

This method affects the return value of the next call to the IEnumNmSharableApp::Next method.

Up Arrow Back to IEnumNmSharableApp Interface

Up Arrow Back to Enumerators

Up Arrow Back to COM Object Listing


Internet Locator Server Reference

This reference defines the COM-based Internet Locator Server (ILS) objects, formerly known as User Location Service (ULS). The objects enable your application to communicate with other applications over the Internet, similar to the directory service support provided within Microsoft® NetMeeting™ 2.1.

ILS is defined and represented by a set of COM-based objects. A client application makes use of these objects through predefined sets of interfaces to each instance of the object.

For more information and guidelines refer to the ILS Extended Attributes and Implementing Filters in ILS Queries tutorials.

ILS Object Conceptual Diagram

ILS Object, Interface, and Method Listing

General Notes

ILS Object

User Object

Protocol Object

Server Object

Attributes Object

Filter Object

Enumerator Object

Up Arrow Back to References


ILS Object Conceptual Diagram

The following diagram gives a conceptual view of the different objects and their relationship to each other.

ILS Object Conceptual Diagram

Up Arrow Back to ILS Reference


ILS Object, Interface, and Method Listing

The following list shows the objects and associated interfaces and methods available for ILS.

ILS Object
IIlsMain Interface | Abort
 | CreateAttributes
 | CreateFilter
 | CreateServer
 | CreateUser
 | EnumUsers
 | EnumUserNames
 | GetUser
 | Initialize
 | StringToFilter
 | Uninitialize
IConnectionPointContainer
IConnectionPoint—IIlsNotify Interface | EnumUserNamesResult
 | EnumUsersResult
 | GetUserResult
User Object
IIlsUser Interface | AddProtocol
 | Clone
 | CreateProtocol
 | EnumProtocols
 | GetAllExtendedAttributes
 | GetExtendedAttribute
 | GetGuid
 | GetProtocol
 | GetStandardAttribute
 | GetState
 | GetVisible
 | IsWritable
 | Register
 | RemoveExtendedAttribute
 | RemoveProtocol
 | SetExtendedAttribute
 | SetGuid
 | SetStandardAttribute
 | SetVisible
 | Unregister
 | Update
IConnectionPointContainer
IConnectionPoint—IIlsUserNotify Interface | EnumProtocolsResult
 | GetProtocolResult
 | ProtocolChangeResult
 | RegisterResult
 | StateChanged
 | UpdateResult
Protocol Object
IIlsProtocol Interface | GetAllExtendedAttributes
 | GetExtendedAttribute
 | GetPortNumber
 | GetStandardAttribute
 | IsWritable
 | RemoveExtendedAttribute
 | SetExtendedAttribute
 | SetStandardAttribute
 | Update
IConnectionPointContainer
IConnectionPoint—IIlsProtocolNotify Interface | UpdateResult
Server Object
IIlsServer Interface | SetAuthenticationMethod
 | SetBaseDN
 | SetCredential
 | SetDomain
 | SetLogonName
 | SetLogonPassword
 | SetTimeout
Attributes Object
IIlsAttributes Interface | EnumAttributes
 | GetAttribute
 | SetAttribute
 | SetAttributeName
Filter Object
IIlsFilter Interface | AddSubFilter
 | GetCount
 | RemoveSubFilter
 | SetAttributeValue
 | SetExtendedAttributeName
 | SetStandardAttributeName
Enumerator Object
IEnumIlsUser Interface | Clone
 | Next
 | Reset
 | Skip
IEnumIlsNames Interface | Clone
 | Next
 | Reset
 | Skip
IEnumIlsProtocol Interface | Clone
 | Next
 | Reset
 | Skip

Up Arrow Back to ILS Reference


General Notes

The following apply to ILS COM objects.

  • IIlsMain is the first COM object a client application needs to create to make use of Internet Locator Server. The methods provided by the IIlsMain object are stateless; the IIlsMain object is not registered or deregistered on a server.

    The COM layer of the ILS client needs to handle all event notifications from the LDAP provider layer, and this is accomplished more efficiently if there is only one dispatcher—the IIlsMain object. Therefore, only one IIlsMain object can be created per application instance.

    This IIlsMain object creates Server objects, User objects, and User object enumerations.

    Internet Locator Server defines CLSID_UserLocationServices and IID_IIlsMain. An application calls CoCreateInstance or the CoGetClassObject/IClassFactory:CreateInstance combination with these identifiers to obtain the IIlsMain object.

  • All other objects can be instantiated through a method in other objects or object enumeration (whose enumerator is instantiated through a method in other objects). The object is instantiated with a default interface (for example, a User object is instantiated with IIlsUser.) The client application can obtain other interfaces by calling the QueryInterface method.
  • Objects are enumerated through the Enumerator object. An Enumerator object is instantiated through a method from an interface of another object. This automatically provides the context of the objects to be enumerated. For instance, a list of Protocol objects whose enumerator is obtained from IIlsUser is the set of protocols the user's application is registering to the ILS server.
  • Some operations on the objects, that is, methods in their interfaces, are asynchronous and require an asynchronous notification to the client application. The notification mechanism uses the Connectable object model in the COM architecture. The client application must provide a defined sink object interface to be notified by the object of the asynchronous events.
  • Note that some interfaces or methods are not yet implemented. If an interface is not supported, the object returns E_NOINTERFACE. If a method is not supported, the calling method returns E_NOTIMPL.
  • ILS requires the client application to call it from a user interface (UI) thread. A message pump in the caller application is necessary so that it can receive notification messages.

Country/Region Codes

NetMeeting using the following country/region codes:
AF | Afghanistan
AL | Albania
DZ | Algeria
AD | Andorra
AO | Angola
AG | Antigua And Barbuda
AR | Argentina
AM | Armenia
AU | Australia
AT | Austria
AZ | Azerbaijan
BS | Bahamas
BH | Bahrain
BD | Bangladesh
BB | Barbados
BY | Belarus
BE | Belgium
BZ | Belize
BJ | Benin
BT | Bhutan
BO | Bolivia
BA | Bosnia And Herzegovina
BW | Botswana
BR | Brazil
BN | Brunei Darussalam
BG | Bulgaria
BF | Burkina Faso
BI | Burundi
KH | Cambodia
CM | Cameroon
CA | Canada
CV | Cape Verde
CF | Central African Republic
TD | Chad
CL | Chile
CN | China
CO | Colombia
KM | Comoros
CG | Congo
CR | Costa Rica
CI | Cote d'Ivoire
HR | Croatia
CU | Cuba
CY | Cyprus
CZ | Czech Republic
DK | Denmark
DJ | Djibouti
DM | Dominica
DO | Dominican Republic
EC | Ecuador
EG | Egypt
SV | El Salvador
GQ | Equatorial Guinea
ER | Eritrea
EE | Estonia
ET | Ethiopia
FJ | Fiji
FI | Finland
FR | France
GA | Gabon
GM | Gambia, Republic of The
GE | Georgia
DE | Germany
GH | Ghana
GR | Greece
GD | Grenada
GT | Guatemala
GN | Guinea
GW | Guinea-Bissau
GY | Guyana
HT | Haiti
HN | Honduras
HU | Hungary
IS | Iceland
IN | India
ID | Indonesia
IR | Iran
IQ | Iraq
IE | Ireland
IL | Israel
IT | Italy
JM | Jamaica
JP | Japan
JO | Jordan
KZ | Kazakhstan
KE | Kenya
KI | Kiribati
KP | Korea, Democratic People's Republic of
KR | Korea, Republic of
KW | Kuwait
KG | Kyrgyzstan
LA | Laos
LV | Latvia
LB | Lebanon
LS | Lesotho
LR | Liberia
LY | Libyan Arab Jamahiriya
LI | Liechtenstein
LT | Lithuania
LU | Luxembourg
MK | Macedonia, Former Yugoslav Republic of
MG | Madagascar
MW | Malawi
MY | Malaysia
MV | Maldives
ML | Mali
MT | Malta
MH | Marshall Islands
MR | Mauritania
MU | Mauritius
MX | Mexico
FM | Micronesia, Federated States of
MD | Moldova
MC | Monaco
MN | Mongolia
MA | Morocco
MZ | Mozambique
MM | Myanmar
NA | Namibia
NR | Nauru
NP | Nepal
NL | Netherlands
NZ | New Zealand
NI | Nicaragua
NE | Niger
NG | Nigeria
NO | Norway
OM | Oman
PK | Pakistan
PW | Palau
PA | Panama
PG | Papua New Guinea
PY | Paraguay
PE | Peru
PH | Philippines
PL | Poland
PT | Portugal
QA | Qatar
RO | Romania
RU | Russian Federation
RW | Rwanda
KN | Saint Kitts And Nevis
LC | Saint Lucia
VC | Saint Vincent And The Grenadines
SM | San Marino
ST | Sao Tome And Principe
SA | Saudi Arabia
SN | Senegal
SC | Seychelles
SL | Sierra Leone
SG | Singapore
SK | Slovakia (Slovak Republic)
SI | Slovenia
SB | Solomon Islands
SO | Somalia
ZA | South Africa
ES | Spain
LK | Sri Lanka
SD | Sudan
SR | Suriname
SZ | Swaziland
SE | Sweden
CH | Switzerland
SY | Syrian Arab Republic
TW | Taiwan
TJ | Tajikistan
TZ | Tanzania, United Repulic of
TH | Thailand
TG | Togo
TO | Tonga
TT | Trinidad And Tobago
TN | Tunisia
TR | Turkey
TM | Turkmenistan
TV | Tuvalu
UG | Uganda
UA | Ukraine
AE | United Arab Emirates
GB | United Kingdom
US | United States
UY | Uruguay
UZ | Uzbekistan
VU | Vanuatu
VA | Vatican City
VE | Venezuela
VN | Vietnam
EH | Western Sahara
YE | Yemen
YU | Yugoslavia
ZR | Zaire
ZM | Zambia
ZW | Zimbabwe

For more information and guidelines refer to the ILS Extended Attributes and Implementing Filters in ILS Queries tutorials.

Up Arrow Back to ILS Reference


ILS Object

An IIlsMain object is created from CoCreateInstance with a predefined class identifier (CLSID_UserLocationServices) and interface (IID_IIlsMain).

IIlsMain Interface
IConnectionPointContainer
IConnectionPoint—IIlsNotify Interface

Up Arrow Back to ILS Reference

IIlsMain Interface

The IIlsMain object provides the IIlsMain interface, which is instantiated from IID_IIlsMain. The interface provides the methods described in this section.

Abort
CreateAttributes
CreateFilter
CreateServer
CreateUser
EnumUserNames
EnumUsers
GetUser
Initialize
StringToFilter
Uninitialize

Up Arrow Back to ILS Object

IIlsMain::Abort

HRESULT IIlsMain::Abort(
    ULONG  uReqID);

Aborts the asynchronous request for the specified unique request identifier.

  • Returns one of the following values:
    S_OK | Success.
    ILS_E_PARAMETER | Request identifier doesn't match any currently in the queue.
    ILS_E_FAIL | Not able to abort this type of request (register and unregister).
    ILS_E_NOT_INITIALIZED | IIlsMain interface is not initialized.
uReqID
Identifier of the request being canceled.

This method will not abort a register or unregister process.

Up Arrow Back to IIlsMain Interface

Up Arrow Back to ILS Object

Up Arrow Back to ILS Object Listing

IIlsMain::CreateAttributes

HRESULT IIlsMain::CreateAttributes(
    ILS_ATTR_TYPE  AttrType,
    IIlsAttributes  ** ppAttributes);

Instantiates an Attributes object that can be used with an extended attribute request to the ILS server.

  • Returns one of the following values:
    S_OK | Success.
    ILS_E_POINTER | ppAttributes is NULL.
    ILS_E_PARAMETER | AttrType is incorrect.
    ILS_E_MEMORY | Unable to allocate enough memory for this request.
AttrType
Purpose of the Attributes object.
ppAttributes
Pointer to receive an empty Attributes object.

The Attributes object is currently overloaded to be used in two ways. The AttrType parameter enables the application to specify how the attribute is to be used:

  • ILS_ATTRTYPE_NAME_VALUE: First type/usage of the Attributes object is for the storage of attribute name/value pairs. This type is used for setting arbitrary attributes with IIlsUser. IIlsAttributes::GetAttribute also returns these Attributes object types.
  • ILS_ATTRTYPE_NAME_ONLY: Second type/usage of the Attributes object is to specify a list of attribute names. The attribute specifier is supplied as a parameter to IIlsMain::EnumUsers and IIlsMain::GetUser. It specifies the arbitrary attributes to be retrieved from the server.

Up Arrow Back to IIlsMain Interface

Up Arrow Back to ILS Object

Up Arrow Back to ILS Object Listing

IIlsMain::CreateFilter

HRESULT IIlsMain::CreateFilter(
    ILS_FILTER_TYPE  FilterType,
    ILS_FILTER_OP  FilterOp,
    IIlsFilter **ppFilter);

Creates a Filter object that can be used or manipulated.

  • Returns one of the following values:
    S_OK | Success.
    ILS_S_SERVER_MAY_NOT_SUPPORT | LDAP server might not support these types of filter operations.
    ILS_E_POINTER | ppFilter is NULL.
    ILS_E_PARAMETER | Filter operation and filter type are incompatible.
    ILS_E_FILTER_TYPE | Filter type is invalid.
    ILS_E_MEMORY | Unable to allocate enough memory for this request.
FilterType
Type of the filter; can be either simple (ILS_FILTERTYPE_SIMPLE) or composite (ILS_FILTERTYPE_COMPOSITE).
FilterOp
Operator of the Filter object. The following options are available:
FilterOp must be one of the following if FilterType is ILS_FILTERTYPE_SIMPLE.
ILS_FILTEROP_EQUAL
ILS_FILTEROP_APPROX
ILS_FILTEROP_LESS_THAN
ILS_FILTEROP_GREATER_THAN
ILS_FILTEROP_EXIST
FilterOp must be one of the following if FilterType is ILS_FILTERTYPE_COMPOSITE.
ILS_FILTEROP_AND
ILS_FILTEROP_OR
ILS_FILTEROP_NOT
ppFilter
Address where the Filter object pointer is held.

Up Arrow Back to IIlsMain Interface

Up Arrow Back to ILS Object

Up Arrow Back to ILS Object Listing

IIlsMain::CreateServer

HRESULT IIlsMain::CreateServer(
    BSTR  bstrServerName,
    IIlsServer  **ppServer);

Creates an ILS Server object. The application can set the various parameters associated with a server, such as authentication credentials.

  • Returns one of the following values:
    S_OK | Success.
    ILS_E_MEMORY | Unable to allocate enough memory for this request.
    ILS_E_POINTER | Either or both parameters are NULL, thus invalid.
bstrServerName
Name of the server.
ppServer
Pointer to receive the ILS Server object.

Up Arrow Back to IIlsMain Interface

Up Arrow Back to ILS Object

Up Arrow Back to ILS Object Listing

IIlsMain::CreateUser

HRESULT IIlsMain::CreateUser(
    BSTR  bstrUserID,
    BSTR  bstrAppName,
    IlsUser  **ppUser);

Creates an ILS User object, which the client application can modify and register with a server.

  • Returns one of the following values:
    S_OK | Success.
    ILS_E_MEMORY | Unable to allocate enough memory for this request.
    ILS_E_POINTER | User pointer is NULL.
    ILS_E_PARAMETER | User name or application name is NULL.
bstrUserID
Unique identifier of the user.
bstrAppName
Name of the application to be registered.
ppUser
Pointer to receive the ILS User object.

Up Arrow Back to IIlsMain Interface

Up Arrow Back to ILS Object

Up Arrow Back to ILS Object Listing

IIlsMain::EnumUserNames

HRESULT IIlsMain::EnumUserNames(
    IIlsServer  *pServer,
    IIlsFilter  *pFilter,
    IEnumIlsNames  **ppEnumUserNames,
    ULONG  *puReqID);

Enumerates the names of the users currently registered on the specified ILS server.

  • Returns one of the following values:
    S_OK | Success.
    ILS_E_NOT_IMPL | User enumerator pointer is not NULL; synchronous interface is not yet implemented.
    ILS_E_POINTER | Address of the server object, filter, or request identifier is NULL.
    ILS_E_NOT_INITIALIZED | IIlsMain interface is not initialized.
    ILS_E_MEMORY | Unable to allocate enough memory for this request.
pServer
ILS Server object that specifies the server to enumerate.
pFilter
Filter object. If this parameter is NULL, the enumeration is performed without any filtering.
ppEnumUserNames
If the method is called synchronously, a pointer to receive the Enumerator object. (Unused pending implementation of synchronous operation of this method.) Must be NULL.
puReqID
Address of a ULONG buffer to receive the request identifier.

This method is currently an asynchronous operation, but the interface is defined to enable future implementation of synchronous operation. When called asynchronously, the application receives the IIlsNotify::EnumUserNamesResult notification for the enumeration result.

Up Arrow Back to IIlsMain Interface

Up Arrow Back to ILS Object

Up Arrow Back to ILS Object Listing

IIlsMain::EnumUsers

HRESULT IIlsMain::EnumUsers(
    IIlsServer  *pServer,
    IIlsFilter  *pFilter,
    IIlsAttributes  *pAttrib,
    IEnumIlsUser  **ppEnumUsers,
    ULONG  *puReqID);

Enumerates the list of User objects representing the users currently registered on the specified ILS server.

  • Returns one of the following values:
    S_OK | Success.
    ILS_E_NOT_IMPL | User enumerator pointer is not NULL; synchronous interface is not yet implemented.
    ILS_E_POINTER | Address of the server object, filter, or request identifier is NULL.
    ILS_E_NOT_INITIALIZED | IIlsMain interface is not initialized.
    ILS_E_MEMORY | Unable to allocate enough memory for this request.
pServer
ILS Server object that specifies the server to enumerate.
pFilter
Filter object. If this parameter is NULL, the enumeration is performed without any filtering.
pAttrib
Attributes object that contains the names of the extended attributes to retrieve from the server. If this parameter is NULL, the enumeration is performed without retrieving any extended attributes.
ppEnumUsers
If the method is called synchronously, a pointer to receive the Enumerator object. (Unused pending implementation of synchronous operation of this method.) Must be NULL.
puReqID
Address of a ULONG buffer to receive the request identifier.

This method is currently an asynchronous operation, but the interface is defined to enable future implementation of synchronous operation. When called asynchronously, the application receives the IIlsNotify::EnumUsersResult notification for the enumeration result.

Up Arrow Back to IIlsMain Interface

Up Arrow Back to ILS Object

Up Arrow Back to ILS Object Listing

IIlsMain::GetUser

HRESULT IIlsMain::GetUser(
    [in] IIlsServer  *pServer,
    [in] BSTR  bstrUserID,
    [in] BSTR bstrAppID,
    [in] BSTR  bstrProtID,
    [in] IIlsAttributes  *pAttrib,
    [out] IIlsUser  **ppILSUser,
    [out] ULONG  *puReqID);

Retrieves the detailed information for the specified user from the specified server.

  • Returns one of the following values:
    S_OK | Success.
    ILS_E_NOT_IMPL | User pointer is not NULL; synchronous interface is not yet implemented.
    ILS_E_POINTER | Pointer parameters are NULL.
    ILS_E_FAIL | IIlsMain interface is not initialized.
    ILS_E_MEMORY | Unable to allocate enough memory for this request.
pServer
Address of the ILS Server object.
bstrUserID
Null-terminated string for the user's unique identifier. The identifier is returned from the user enumeration.
bstrAppID
Null-terminated string for the user's application identifier.
bstrProtID
Null-terminated string for the user's protocol identifier.
pAttrib
Attributes object that contains the names of the extended attributes to retrieve from the server. If this parameter is NULL, the enumeration is performed without retrieving any extended attributes.
ppILSUser
If the method is called synchronously, a pointer to receive the User object. (Unused pending implementation of synchronous operation of this method.)
puReqID
Address of a ULONG buffer to receive the request identifier.

This method is currently an asynchronous operation, but the interface is defined to enable future implementation of synchronous operation. When called asynchronously, the application will receive the IIlsNotify::GetUserResult notification for the request result.

If bstrAppID is NULL, the globally unique identifier (GUID) returned from IIlsUser::GetGuid is all zeros.

Up Arrow Back to IIlsMain Interface

Up Arrow Back to ILS Object

Up Arrow Back to ILS Object Listing

IIlsMain::Initialize

HRESULT IIlsMain::Initialize(void);

Initializes the ILS for the application.

  • Returns one of the following values:
    S_OK | Success.
    ILS_E_FAIL | Interface is already initialized.
    ILS_E_MEMORY | Unable to allocate enough memory for this request.
    ILS_E_WINSOCK | WSA (Windows Socket API) services could not be started.
    ILS_E_THREAD | Request thread could not be created.

Up Arrow Back to IIlsMain Interface

Up Arrow Back to ILS Object

Up Arrow Back to ILS Object Listing

IIlsMain::StringToFilter

HRESULT IIlsMain::StringToFilter(
    BSTR  bstrFilterString,
    IIlsFilter  **ppFilter);

Creates a Filter object that can be used or manipulated by supplying a syntactical description of the filter desired.

  • Returns one of the following values:
    S_OK | Success.
    ILS_E_POINTER | Filter string is NULL.
    ILS_E_FAIL | Could not convert the string.
    ILS_E_MEMORY | Unable to allocate enough memory for this request.
    ILS_E_FILTER_STRING | Incorrect filter string.
bstrFilterString
Null-terminated string describing the construction of the filter.
ppFilter
Address where the Filter object pointer is held.

The full filter string definition will be specified in the next draft of the ILS interface. Following is a brief description:

  • The filter string takes the form ((Attribute=Value) & (Attribute=Value)).
  • The attributes are specified as $#, where # is the ordinal number in the ILS_STD_ATTR_NAME enumerator type (for example, "$1", "$4", and so on).
  • Value is the value that you want the attribute to match (for example, "john", "Washington", and so on).
  • The only supported logical concatenation operator for ILS version 1.x is AND, specified by "&".
  • An example filter string: (($1=jfk) & ($4=kennedy))

Up Arrow Back to IIlsMain Interface

Up Arrow Back to ILS Object

Up Arrow Back to ILS Object Listing

IIlsMain::Uninitialize

HRESULT IIlsMain::Uninitialize(void);

Frees all the resources used by the current application.

  • Returns S_OK if successful, or ILS_E_FAIL if IIlsMain is not initialized.

Up Arrow Back to IIlsMain Interface

Up Arrow Back to ILS Object

Up Arrow Back to ILS Object Listing

IConnectionPointContainer

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

IConnectionPoint

The IConnectionPoint_IIlsMain interface is instantiated from IConnectionPointContainer_IIlsMain. The ILS object provides only one connection point—IID_IIlsNotify—for a client's sink object to receive the callback notification. The client must provide the IIlsNotify interface methods described in this section in the sink object.

IIlsNotify Interface

This interface is implemented by a client application that will receive notifications from an ILS object.

GetUserResult
EnumUserNamesResult
EnumUsersResult

Up Arrow Back to ILS Object

IIlsNotify::EnumUserNamesResult

HRESULT IIlsNotify::EnumUserNamesResult(
    ULONG  uReqID,
    IEnumIlsNames  *pEnumUserName,
    HRESULT  hResult);

Notifies the application of the result of the user name enumeration from an ILS server.

  • Returns S_OK if successful, or S_FALSE if an error occurred.
uReqID
Request identifier matching the IIlsMain::EnumUserNames method.
pEnumUserName
User's unique name enumerator. The user's unique name is a null-terminated string that the application can use to request the actual User object from the IIlsMain::GetUser method.
hResult
Enumeration result:
  • S_OK if the enumerator is valid and more users will be available. More users will be provided through the subsequent IIlsNotify::EnumUserNamesResult notification.
  • S_FALSE if the enumerator is NULL and no more users will be available.
  • An error code otherwise.

Up Arrow Back to IIlsNotify Interface

Up Arrow Back to ILS Object

Up Arrow Back to ILS Object Listing

IIlsNotify::EnumUsersResult

HRESULT IIlsNotify::EnumUsersResult(
    ULONG  uReqID,
    IEnumIlsUser  *pEnumUser,
    HRESULT  hResult);

Notifies the application of the result of the user enumeration from an ILS server.

  • Returns S_OK if successful, or S_FALSE if an error occurred.
uReqID
Request identifier matching the IIlsMain::EnumUsers method.
pEnumUser
User object enumerator.
hResult
Enumeration result:
  • S_OK if the enumerator is valid and more users will be available. More users will be provided through the subsequent IIlsNotify::EnumUsersResult notification.
  • S_FALSE if the enumerator is NULL and no more users will be available.
  • An error code otherwise.

Up Arrow Back to IIlsNotify Interface

Up Arrow Back to ILS Object

Up Arrow Back to ILS Object Listing

IIlsNotify::GetUserResult

HRESULT IIlsNotify::GetUserResult(
    ULONG  uReqID,
    IIlsUser  *pUser,
    HRESULT  hResult);

Notifies the application of the result of the user information request from an ILS server.

  • Returns S_OK if successful, or ILS_E_MEMORY if unable to allocate enough memory for this request.
uReqID
Request identifier matching the IIlsMain::GetUser method.
pUser
User object from which the application can retrieve the user information.
hResult
Resolution result: S_OK if the User object is valid, or an error code otherwise.

Up Arrow Back to IIlsNotify Interface

Up Arrow Back to ILS Object

Up Arrow Back to ILS Object Listing


User Object

The User object represents the user information published on the ILS server.

IIlsUser Interface
IConnectionPoint—IIlsUserNotify Interface

Up Arrow Back to ILS Reference

IIlsUser Interface

The IIlsUser interface is obtained from the IIlsMain::CreateUser, IIlsMain::EnumUsers, or IIlsMain::GetUser method. This section describes the IIlsUser interface methods.

AddProtocol
Clone
CreateProtocol
EnumProtocols
GetAllExtendedAttributes
GetExtendedAttribute
GetGuid
GetProtocol
GetStandardAttribute
GetState
GetVisible
IsWritable
Register
RemoveExtendedAttribute
RemoveProtocol
SetExtendedAttribute
SetGuid
SetStandardAttribute
SetVisible
Unregister
Update

Up Arrow Back to User Object

IIlsUser::AddProtocol

HRESULT IIlsUser::AddProtocol(
    IIlsProtocol  *pProtocol,
    ULONG  *puReqID);

Adds a new protocol for the user's application.

  • Returns one of the following values:
    S_OK | Success.
    ILS_E_POINTER | Address of the protocol interface is NULL, or the address request identifier is NULL.
    ILS_E_PARAMETER | A protocol by this name already exists.
    ILS_E_FAIL | Could not add protocol; user is in the middle of registration or unregistration.
    ILS_E_NOT_INITIALIZED | IIlsMain interface is not initialized.
pProtocol
Protocol object.
puReqID
Address of a ULONG buffer to receive the request identifier.

Depending on the User object registration state, this method can be either synchronous or asynchronous. If the User object is unregistered when the AddProtocol method is called to add a protocol object to the User object, this method returns synchronously and requires no interaction with the server. The protocol object will be added when the User object registers with the server. If the user object is already registered at the time of calling AddProtocol, the call is asynchronous and will involve sending an update to the server to add the Protocol object to the User object. If asynchronous, the application receives the IIlsUserNotify::ProtocolChangeResult notification for the request result.

Up Arrow Back to IIlsUser Interface

Up Arrow Back to User Object

Up Arrow Back to ILS Object Listing

IIlsUser::Clone

HRESULT IIlsUser::Clone(
    [out] IIlsUser **ppUser);

Returns a cloned version of the User object, with the identical set of standard and extended attributes set before this method is called.

  • Returns S_OK if successful, or ILS_E_MEMORY if unable to allocate enough memory for this request.
ppUser
User object from which the application can clone user information.

A cloned object can be used to register the same user to different servers. There is no synchronization between the cloned and the original User object.

To ensure that all attributes are written correctly, the User object to be cloned should be registered on a server and updated before calling Clone.

Up Arrow Back to IIlsUser Interface

Up Arrow Back to User Object

Up Arrow Back to ILS Object Listing

IIlsUser::CreateProtocol

HRESULT IIlsUser::CreateProtocol(
    BSTR  bstrProtocolID,
    ULONG  uPortNumber,
    BSTR  bstrMimeType,
    IIlsProtocol  **ppProtocol);

Creates a Protocol object that represents a protocol the user's application can use to establish the communication channel.

  • Returns one of the following values:
    S_OK | Success.
    ILS_E_POINTER | Pointer to hold the protocol interface is NULL.
    ILS_E_MEMORY | Unable to allocate enough memory for this request.
bstrProtocolID
Null-terminated string for the protocol's unique identifier.
uPortNumber
Port number that is used by the protocol.
bstrMimeType
Null-terminated string for the protocol's MIME type.
ppProtocol
Pointer to receive the Protocol object.

Up Arrow Back to IIlsUser Interface

Up Arrow Back to User Object

Up Arrow Back to ILS Object Listing

IIlsUser::EnumProtocols

HRESULT IIlsUser::EnumProtocols(
    IIlsFilter  *pFilter,
    IIlsAttributes  *pAttributes,
    IEnumIlsProtocol  **ppEnumProtocol,
    ULONG  *puReqID);

Returns a protocol enumerator for the user's application, with an option to apply an enumeration filter and an option to retrieve extended protocol attributes.

  • Returns one of the following values:
    S_OK | Success.
    ILS_E_POINTER | Address request identifier is NULL.
    ILS_E_ACCESS_DENIED | User object is not read-only.
    ILS_E_NOT_INITIALIZED | IIlsMain interface is not initialized.
    ILS_E_MEMORY | Unable to allocate enough memory for this request.
pFilter
Filter object. This parameter is currently ignored.
pAttributes
Attributes object that contains the extended attributes to retrieve from the server. This parameter is currently ignored.
ppEnumProtocol
If the method is called synchronously, a pointer to receive the Enumerator object. (Unused pending implementation of synchronous operation of this method.)
puReqID
Address of a ULONG buffer to receive the request identifier.

This method is currently an asynchronous operation, but the interface is defined to enable future implementation of synchronous operation. When called asynchronously, the application receives the IIlsUserNotify::EnumProtocolsResult notification for the enumeration result.

Up Arrow Back to IIlsUser Interface

Up Arrow Back to User Object

Up Arrow Back to ILS Object Listing

IIlsUser::GetAllExtendedAttributes

HRESULT IIlsUser::GetAllExtendedAttributes(
    IIlsAttributes  **ppAttributes);

Returns all extended attributes, in the form of an Attributes object, from the User object. This is an alternative to getting each extended attribute individually through IIlsUser::GetExtendedAttribute.

  • Returns one of the following values:
    S_OK | Success.
    ILS_E_PARAMETER | Return buffer pointer is NULL.
    ILS_E_MEMORY | Unable to allocate enough memory for this request.
    ILS_E_ACCESS_CONTROL | Attribute type is ILS_ATTRTYPE_NAME_ONLY.
ppAttributes
Buffer to receive the address of the Attributes object.

Up Arrow Back to IIlsUser Interface

Up Arrow Back to User Object

Up Arrow Back to ILS Object Listing

IIlsUser::GetExtendedAttribute

HRESULT IIlsUser::GetExtendedAttribute(
    BSTR  bstrName,
    BSTR  *pbstrValue);

Retrieves an extended attribute from a User object that was previously retrieved from the server.

  • Returns one of the following values:
    S_OK | Success.
    ILS_E_ACCESS_CONTROL | Attribute type is ILS_ATTRTYPE_NAME_ONLY.
    ILS_E_POINTER | Address of the return buffer is NULL or attribute name is NULL.
    ILS_E_PARAMETER | Attribute name is empty.
    ILS_E_MEMORY | Unable to allocate enough memory for this request.
    ILS_E_FAIL | Attribute not found.
bstrName
Name of the extended attribute.
pbstrValue
Address of the buffer to receive the value of the extended attribute.

Up Arrow Back to IIlsUser Interface

Up Arrow Back to User Object

Up Arrow Back to ILS Object Listing

IIlsUser::GetGuid

HRESULT IIlsUser::GetGuid(
    GUID  *pGuid);

Returns the GUID (globally unique identifier) of the retrieved User object.

  • Returns S_OK if successful, or ILS_E_POINTER if the address of the return buffer is invalid.
pGuid
Pointer to receive the GUID associated with this User object.

Up Arrow Back to IIlsUser Interface

Up Arrow Back to User Object

Up Arrow Back to ILS Object Listing

IIlsUser::GetProtocol

HRESULT IIlsUser::GetProtocol(
    BSTR  bstrProtocolID,
    IIlsAttributes  *pAttributes,
    IIlsProtocol  **ppProtocol,
    ULONG  *puReqID);

Requests a specific Protocol object that belongs to the user.

  • Returns one of the following values:
    S_OK | Success.
    ILS_E_POINTER | Address of the protocol identifier is NULL, or address request identifier is NULL.
    ILS_E_ACCESS_DENIED | User object is not read-only.
    ILS_E_FAIL | An error has occurred.
    ILS_E_MEMORY | Unable to allocate enough memory for this request.
    ILS_E_NOT_INITIALIZED | IIlsMain interface is not initialized.
bstrProtocolID
Specified protocol to retrieve.
pAttributes
Attributes object that contains the names of the extended attributes to retrieve from the server. If this parameter is NULL, the enumeration is performed without retrieving any extended attributes.
ppProtocol
If the method is called synchronously, a pointer to receive the Enumerator object. (Unused pending implementation of synchronous operation of this method.) Must be NULL.
puReqID
Address of a ULONG buffer to receive the request identifier.

This method is currently an asynchronous operation, but the interface is defined to enable future implementation of synchronous operation. When called asynchronously, the application receives the IIlsUserNotify::GetProtocolResult notification for the request. The Protocol object can be used to retrieve information about the protocol.

Up Arrow Back to IIlsUser Interface

Up Arrow Back to User Object

Up Arrow Back to ILS Object Listing

IIlsUser::GetStandardAttribute

HRESULT IIlsUser::GetStandardAttribute(
    ILS_STD_ATTR_NAME  StdAttr,
    BSTR  *pbstrValue);

Returns a standard attribute belonging to the user.

  • Returns one of the following values:
    S_OK | Success.
    ILS_E_POINTER | Invalid address of an attribute variable.
    ILS_E_MEMORY | Unable to allocate enough memory for this request.
    ILS_E_PARAMETER | Attribute name is invalid.
StdAttr
Standard attribute of the User object. Can be one of the following:
ILS_STDATTR_USER_ID | Unique identifier of the user.
ILS_STDATTR_IP_ADDRESS | IP address of the user.
ILS_STDATTR_EMAIL_NAME | E-mail name of the user.
ILS_STDATTR_FIRST_NAME | First name of the user.
ILS_STDATTR_LAST_NAME | Last name of the user.
ILS_STDATTR_CITY_NAME | Name of the city in which the user is located.
ILS_STDATTR_COUNTRY_NAME | Name of the country in which the user is located.
ILS_STDATTR_COMMENT | General textual comment.
ILS_STDATTR_FLAGS | Flags need to be set to "1" for the User object to be visible in enumeration.
ILS_STDATTR_APP_NAME | Unique string identifying the application.
ILS_STDATTR_APP_MIME_TYPE | MIME type used by the application.
ILS_STDATTR_APP_GUID | GUID (globally unique identifier) of the application.
pbstrValue
Pointer to receive a null-terminated string for the user's standard attribute.

NetMeeting uses two-letter country codes for ILS_STDATTR_COUNTRY_NAME.

Up Arrow Back to IIlsUser Interface

Up Arrow Back to User Object

Up Arrow Back to ILS Object Listing

IIlsUser::GetState

HRESULT IIlsUser::GetState(
    ILS_STATE  *pState);

Returns the registration state on the specified ILS server.

  • Returns S_OK if successful, or ILS_E_POINTER if there is an invalid address of the state variable.
pState
Address of a buffer to receive the current ILS state. Can be one of the following:
ILS_REGISTERING | The user is being registered with the ILS server.
ILS_REGISTERED | The user is registered with the ILS server.
ILS_UNREGISTERING | The user is unregistered with the ILS server.
ILS_UNREGISTERED | The user is not registered with the ILS server.
ILS_REGISTERED_BUT_INVALID | Server does not recognize the current user.
ILS_NETWORK_DOWN | Cannot connect to the server.

Up Arrow Back to IIlsUser Interface

Up Arrow Back to User Object

Up Arrow Back to ILS Object Listing

IIlsUser::GetVisible

HRESULT IIlsUser::GetVisible(
    DWORD  *pdwVisible);

Returns the visible state of the user.

  • Returns S_OK if successful, or ILS_E_POINTER if the address of the return buffer is invalid.
pdwVisible
Pointer to receive a DWORD for the user's visible state.

Up Arrow Back to IIlsUser Interface

Up Arrow Back to User Object

Up Arrow Back to ILS Object Listing

IIlsUser::IsWritable

HRESULT IIlsUser::IsWritable(
    BOOL *pValue);

Returns whether the User object can be written to.

  • Returns S_OK if successful, or ILS_E_POINTER if the return buffer pointer is NULL.
pValue
Address of the buffer to receive the Boolean variable.

User objects returned from enumeration or IIlsMain::GetUser cannot be written to, but those created through IIlsMain::CreateUser can.

Up Arrow Back to IIlsUser Interface

Up Arrow Back to User Object

Up Arrow Back to ILS Object Listing

IIlsUser::Register

HRESULT IIlsUser::Register(
    IIlsServer  *pServer,
    ULONG  *puReqID);

Publishes the user information to the ILS server.

  • Returns one of the following values:
    S_OK | Success.
    ILS_E_ALREADY_REGISTERED | This user is already registered on a server.
    ILS_E_POINTER | Server pointer or request identifier is NULL.
    ILS_E_ACCESS_DENIED | User object is read-only.
    ILS_E_MEMORY | Unable to allocate enough memory for this request.
    ILS_E_FAIL | Could not register; server or user is not in correct state.
pServer
Address of the ILS Server object.
puReqID
Address of a ULONG buffer to receive the request identifier.

This method is an asynchronous operation. The application receives the IIlsUserNotify::RegisterResult notification for the registration result.

Up Arrow Back to IIlsUser Interface

Up Arrow Back to User Object

Up Arrow Back to ILS Object Listing

IIlsUser::RemoveExtendedAttribute

HRESULT IIlsUser::RemoveExtendedAttribute(
    BSTR  bstrName);

Removes an extended attribute from the User object. The modification will not be reflected on the ILS server until the IIlsUser::Register or IIlsUser::Update method is called.

  • Returns one of the following values:
    S_OK | Success.
    ILS_E_ACCESS_DENIED | User object is not writable.
    ILS_E_ACCESS_CONTROL | Attribute type is ILS_ATTRTYPE_NAME_ONLY.
    ILS_E_POINTER | Attribute name is NULL.
    ILS_E_PARAMETER | Attribute name is empty.
    ILS_E_MEMORY | Unable to allocate enough memory for this request.
bstrName
Name of the extended attribute to remove.

Up Arrow Back to IIlsUser Interface

Up Arrow Back to User Object

Up Arrow Back to ILS Object Listing

IIlsUser::RemoveProtocol

HRESULT IIlsUser::RemoveProtocol(
    IIlsProtocol  *pProtocol,
    ULONG  *puReqID);

Removes a protocol for the user's application.

  • Returns one of the following values:
    S_OK | Success.
    ILS_E_POINTER | Address of the protocol interface is NULL, or the address request identifier is NULL.
    ILS_E_PARAMETER | No protocol by this name exists.
    ILS_E_FAIL | Could not remove protocol; user is in the middle of registration or unregistration.
pProtocol
Protocol object.
puReqID
Address of a ULONG buffer to receive the request identifier.

This method is an asynchronous operation. The application receives the IIlsUserNotify::ProtocolChangeResult notification for the request result.

Up Arrow Back to IIlsUser Interface

Up Arrow Back to User Object

Up Arrow Back to ILS Object Listing

IIlsUser::SetExtendedAttribute

HRESULT IIlsUser::SetExtendedAttribute(
    BSTR  bstrName,
    BSTR  bstrValue);

Adds or modifies an extended attribute of the user. The modification will not be reflected on the ILS server until the IIlsUser::Register or IIlsUser::Update method is called.

  • Returns one of the following values:
    S_OK | Success.
    ILS_E_ACCESS_DENIED | User object is not writable.
    ILS_E_ACCESS_CONTROL | Attribute type is ILS_ATTRTYPE_NAME_ONLY.
    ILS_E_POINTER | Attribute name is NULL.
    ILS_E_PARAMETER | Attribute name is empty.
    ILS_E_MEMORY | Unable to allocate enough memory for this request.
bstrName
Name of the extended attribute.
bstrValue
Value of the extended attribute.

Up Arrow Back to IIlsUser Interface

Up Arrow Back to User Object

Up Arrow Back to ILS Object Listing

IIlsUser::SetGuid

HRESULT IIlsUser::SetGuid(
    *pGuid);

Sets the GUID (globally unique identifier) of the User object. An application that creates the User object should insert its GUID in this property.

  • Returns S_OK if successful, or ILS_E_ACCESS_DENIED if the User object is read-only.
pGuid
Pointer that contains the GUID to be set for this User object.

Up Arrow Back to IIlsUser Interface

Up Arrow Back to User Object

Up Arrow Back to ILS Object Listing

IIlsUser::SetStandardAttribute

HRESULT IIlsUser::SetStandardAttribute(
    ILS_STD_ATTR_NAME  StdAttr,
    BSTR  bstrValue);

Allows the application to modify a standard attribute of the user. The modification will not be reflected on the ILS server until the IIlsUser::Register or IIlsUser::Update method is called.

  • Returns one of the following values:
    S_OK | Success.
    ILS_E_ACCESS_DENIED | User object is not writable.
    ILS_E_MEMORY | Unable to allocate enough memory for this request.
    ILS_E_PARAMETER | Attribute name is invalid.
StdAttr
Standard attribute of the User object. Can be one of the following:
ILS_STDATTR_USER_ID | Unique identifier of the user. Must be specified at the time of User object creation.
ILS_STDATTR_IP_ADDRESS | IP address of the user, specified as four octets specified in decimal; for example, "123.255.0.123". If this attribute is not set, the ILS interface automatically detects the network address and uses the found IP address.
ILS_STDATTR_EMAIL_NAME | E-mail name of the user.
ILS_STDATTR_FIRST_NAME | First name of the user.
ILS_STDATTR_LAST_NAME | Last name of the user.
ILS_STDATTR_CITY_NAME | Name of the city in which the user is located.
ILS_STDATTR_COUNTRY_NAME | Name of the country in which the user is located.
ILS_STDATTR_COMMENT | General textual comment.
ILS_STDATTR_FLAGS | Flags to indicate the visibility of the User object on the server. Use IIlsUser::SetVisible to modify this flag.
ILS_STDATTR_APP_NAME | Unique string identifying the application. Cannot set this attribute. Must be specified at the time of User object creation.
ILS_STDATTR_APP_MIME_TYPE | MIME type used by the application.
ILS_STDATTR_APP_GUID | GUID (globally unique identifier) of the application.
ILS_STDATTR_PROTOCOL_NAME | Applies to the protocol object.
ILS_STDATTR_PROTOCOL_MIME_TYPE | Applies to the protocol object.
ILS_STDATTR_PROTOCOL_PORT | Applies to the protocol object.
bstrValue
Null-terminated string for the user's standard attribute.

A user's email name is used his/her default user id (ILS_STDATTR_USER_ID) on the server. The ILS server enforces the uniqueness of this attribute.

NetMeeting uses two-letter country codes for ILS_STDATTR_COUNTRY_NAME.

ILS servers use Email name (ILS_STDATTR_EMAIL_NAME) and Country code (ILS_STDATTR_COUNTRY_NAME) as part of the full LDAP path on the server. As a result, these attributes cannot be modified using this method while the user is registered on the server. To modify these attributes, log off the server and create a new user object with the desired changes.

Up Arrow Back to IIlsUser Interface

Up Arrow Back to User Object

Up Arrow Back to ILS Object Listing

IIlsUser::SetVisible

HRESULT IIlsUser::SetVisible(
    DWORD  fVisible);

Allows the application to modify the visibility state for the user. The modification will not be reflected on the ILS server until the IIlsUser::Register or IIlsUser::Update method is called.

  • Returns S_OK if successful, or ILS_E_ACCESS_DENIED if the User object is read-only.
fVisible
DWORD containing the user's visible state. A value of 0x01 indicates this User object is to be made visible to enumeration. A value of 0x00 indicates this User object is not visible for enumeration, but will succeed if the matching user identifier is requested in IIlsMain::GetUser operations.

Up Arrow Back to IIlsUser Interface

Up Arrow Back to User Object

Up Arrow Back to ILS Object Listing

IIlsUser::Unregister

HRESULT IIlsUser::Unregister(
    ULONG  *puReqID);

Removes the User object from the specified ILS server.

  • Returns one of the following values:
    S_OK | Success.
    ILS_E_NOT_REGISTERED | This user is not registered on a server.
    ILS_E_ACCESS_DENIED | User object is read-only.
    ILS_E_MEMORY | Unable to allocate enough memory for this request.
puReqID
Address of a ULONG buffer to receive the request identifier.

This method is an asynchronous operation. The application receives the IIlsUserNotify::RegisterResult notification for the unregistration result.

It is not recommended to use this method if the registration is in progress (that is, the IIlsUser state is ILS_REGISTERING).

Up Arrow Back to IIlsUser Interface

Up Arrow Back to User Object

Up Arrow Back to ILS Object Listing

IIlsUser::Update

HRESULT IIlsUser::Update(
    ULONG  *puReqID);

Reflects updated user information to the ILS server.

  • Returns one of the following values:
    S_OK | Success.
    S_FALSE | No modifications have been made; there is no need to update this user.
    ILS_E_NOT_REGISTERED | This user is not registered on a server.
    ILS_E_POINTER | Address of the request identifier is NULL.
    ILS_E_MEMORY | Unable to allocate enough memory for this request.
puReqID
Address of a ULONG buffer to receive the request identifier.

This method is an asynchronous operation. The application receives the IIlsUserNotify::UpdateResult notification for the registration result.

Up Arrow Back to IIlsUser Interface

Up Arrow Back to User Object

Up Arrow Back to ILS Object Listing

IConnectionPointContainer

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

IConnectionPoint

The IConnectionPoint_IIlsUser interface is instantiated from IConnectionPointContainer_IIlsUser. The User object provides only one connection point—IID_IIlsUserNotify—for a client's sink object to receive the callback notification. The client must provide the IIlsUserNotify interface methods described in this section in the sink object.

IIlsUserNotify Interface

This interface is implemented by a client application that will receive notifications from a User object.

EnumProtocolsResult
GetProtocolResult
ProtocolChangeResult
RegisterResult
StateChanged
UpdateResult

Up Arrow Back to User Object

IIlsUserNotify::EnumProtocolsResult

HRESULT IIlsUserNotify::EnumProtocolsResult(
    ULONG  uReqID,
    IEnumIlsProtocol  *pEnumProtocol,
    HRESULT  hResult);

Notifies the application of the result of the protocol enumeration request. If the request is successful, pEnumProtocol contains a valid protocol identification enumerator.

  • Returns S_OK if successful, or an error code otherwise.
uReqID
Request identifier matching the IIlsUser::EnumProtocols method.
pEnumProtocol
Protocol identification enumerator.
hResult
Enumeration result. Returns S_OK if the enumerator is valid, or an error code otherwise.

Up Arrow Back to IIlsUserNotify Interface

Up Arrow Back to User Object

Up Arrow Back to ILS Object Listing

IIlsUserNotify::GetProtocolResult

HRESULT IIlsUserNotify::GetProtocolResult(
    ULONG  uReqID,
    IIlsProtocol  *pProtocol,
    HRESULT  hResult);

Notifies the application of the result of the protocol resolve request. If the request is successful, pProtocol contains a valid Protocol object.

  • Returns S_OK if successful, or an error code otherwise.
uReqID
Request identifier matching the IIlsUser::GetProtocol method.
pProtocol
Protocol object.
hResult
Modification result. Returns S_OK if the Protocol object is valid, or an error code otherwise.

Up Arrow Back to IIlsUserNotify Interface

Up Arrow Back to User Object

Up Arrow Back to ILS Object Listing

IIlsUserNotify::ProtocolChangeResult

HRESULT IIlsUserNotify::ProtocolChangeResult(
    ULONG  uReqID,
    HRESULT  hResult);

Notifies the application of the result of the protocol add and remove requests. If the request is successful after registration, the information is propagated to the ILS server.

  • Returns S_OK if successful, or an error code otherwise.
uReqID
Request identifier matching the IIlsUser::AddProtocol or IIlsUser::RemoveProtocol method.
hResult
The modification result. Returns S_OK if the information is changed, or an error code otherwise.

Up Arrow Back to IIlsUserNotify Interface

Up Arrow Back to User Object

Up Arrow Back to ILS Object Listing

IIlsUserNotify::RegisterResult

HRESULT IIlsUserNotify::RegisterResult(
    ULONG  uReqID,
    HRESULT  hResult);

Notifies the application of the result of the user register/unregister requests.

  • Returns S_OK if successful, or an error code otherwise.
uReqID
Request identifier matching the IIlsUser::Register or IIlsUser::Unregister method.
hResult
Result of the register/unregister request. Returns S_OK, or an error code otherwise.

Up Arrow Back to IIlsUserNotify Interface

Up Arrow Back to User Object

Up Arrow Back to ILS Object Listing

IIlsUserNotify::StateChanged

HRESULT IIlsUserNotify::StateChanged(
    ULONG  fPrimary,
    BSTR  bstrServerName);

Notifies the application when the server state for the User object has changed. When notified, the application should call IIlsUser::GetState for the new state information.

  • Returns S_OK if successful.
fPrimary
If set to TRUE, the application can optionally put up a dialog box to inform the user about a state change. If set to FALSE, the application should not notify the user.
bstrServerName
Null-terminated string containing the name of the server whose state has changed.

Up Arrow Back to IIlsUserNotify Interface

Up Arrow Back to User Object

Up Arrow Back to ILS Object Listing

IIlsUserNotify::UpdateResult

HRESULT IIlsUserNotify::UpdateResult(
    ULONG  uReqID,
    HRESULT  hResult);

Notifies the application of the result of the user update requests.

  • Returns S_OK if successful, or an error code otherwise.
uReqID
Request identifier matching the IIlsUser::Update method.
hResult
Result of the update request. Returns S_OK, or an error code otherwise.

Up Arrow Back to IIlsUserNotify Interface

Up Arrow Back to User Object

Up Arrow Back to ILS Object Listing


Protocol Object

The Protocol object represents the information about a protocol for a user's application. The information is published by a user who is registered on the ILS server.

IIlsProtocol Interface
IConnectionPoint—IIlsProtocolNotify Interface

Up Arrow Back to ILS Reference

IIlsProtocol Interface

The IIlsProtocol interface is obtained from the IIlsUser::GetProtocol method. This section describes the IIlsProtocol interface methods.

GetAllExtendedAttributes
GetExtendedAttribute
GetPortNumber
GetStandardAttribute
IsWritable
RemoveExtendedAttribute
SetExtendedAttribute
SetStandardAttribute
Update

Up Arrow Back to User Object

IIlsProtocol::GetAllExtendedAttributes

HRESULT IIlsProtocol::GetAllExtendedAttributes(
    IIlsAttributes  **ppAttributes);

Returns all extended attributes, in the form of an Attributes object, from the Protocol object. This is an alternative to getting each extended attribute individually through IIlsProtocol::GetExtendedAttribute.

This method is not yet implemented.

  • Currently returns ILS_E_NOT_IMPL.
ppAttributes
Buffer to receive the address of the Attributes object.

Up Arrow Back to IIlsProtocol Interface

Up Arrow Back to Protocol Object

Up Arrow Back to ILS Object Listing

IIlsProtocol::GetExtendedAttribute

HRESULT IIlsProtocol::GetExtendedAttribute(
    BSTR  bstrName,
    BSTR  *pbstrValue);

Returns a named extended attribute belonging to the Protocol object.

This method is not yet implemented.

  • Currently returns ILS_E_NOT_IMPL.
bstrName
Name of the extended attribute.
pbstrValue
Address of the buffer to store the value retrieved.

Up Arrow Back to IIlsProtocol Interface

Up Arrow Back to Protocol Object

Up Arrow Back to ILS Object Listing

IIlsProtocol::GetPortNumber

HRESULT GetPortNumber
    [out] ULONG *pulPortNumber);

Returns the port number used by this protocol.

  • Returns S_OK if successful, or ILS_E_POINTER if the address of the return buffer is NULL.
pulPortNumber
Address of the buffer where the port number is returned.

Up Arrow Back to IIlsProtocol Interface

Up Arrow Back to Protocol Object

Up Arrow Back to ILS Object Listing

IIlsProtocol::GetStandardAttribute

HRESULT IIlsProtocol::GetStandardAttribute(
    ILS_STD_ATTR_NAME  StdAttr,
    BSTR  *pbstrValue);

Returns a standard attribute belonging to the Protocol object.

  • Returns one of the following values:
    S_OK | Success.
    ILS_E_POINTER | Address of the return buffer is NULL.
    ILS_E_PARAMETER | Incorrect attribute for this object.
    ILS_E_MEMORY | Unable to allocate enough memory for this request.
StdAttr
Standard attribute of the Protocol object. Can be one of the following:
ILS_STDATTR_PROTOCOL_NAME = 13
ILS_STDATTR_MIME_TYPE = 14
ILS_STDATTR_PORT =15
pbstrValue
Pointer to receive a null-terminated string for the protocol's standard attribute.

Up Arrow Back to IIlsProtocol Interface

Up Arrow Back to Protocol Object

Up Arrow Back to ILS Object Listing

IIlsProtocol::IsWritable

HRESULT IIlsProtocol::IsWritable(
    BOOL  *pValue);

Returns whether the Protocol object can be written to.

  • Returns S_OK if successful, or ILS_E_POINTER if the address of the return buffer is NULL.
pValue
Address of the buffer to receive the Boolean variable.

Protocol objects returned from enumeration or IIlsUser::GetProtocol cannot be written to, but those created through IIlsUser::CreateProtocol can.

Up Arrow Back to IIlsProtocol Interface

Up Arrow Back to Protocol Object

Up Arrow Back to ILS Object Listing

IIlsProtocol::RemoveExtendedAttribute

HRESULT IIlsProtocol::RemoveExtendedAttribute(
    BSTR  bstrName);

Removes an extended attribute. The modification will not be reflected on the ILS server until the IIlsProtocol::Update method is called.

This method is not yet implemented.

  • Currently returns ILS_E_NOT_IMPL.
bstrName
Extended attribute to be removed.

Up Arrow Back to IIlsProtocol Interface

Up Arrow Back to Protocol Object

Up Arrow Back to ILS Object Listing

IIlsProtocol::SetExtendedAttribute

HRESULT IIlsProtocol::SetExtendedAttribute(
    BSTR  bstrName,
    BSTR  bstrValue);

Allows the application to modify an extended attribute of the protocol. The modification will not be reflected on the ILS server until the IIlsProtocol::Update method is called.

This method is not yet implemented.

  • Currently returns ILS_E_NOT_IMPL.
bstrName
Name of the extended attribute.
bstrValue
Value to be set.

Up Arrow Back to IIlsProtocol Interface

Up Arrow Back to Protocol Object

Up Arrow Back to ILS Object Listing

IIlsProtocol::SetStandardAttribute

HRESULT IIlsProtocol::SetStandardAttribute(
    ILS_STD_ATTR_NAME  StdAttr,
    BSTR  bstrValue);

Allows the application to modify a standard attribute of the protocol. The modification will not be reflected on the ILS server until the IIlsProtocol::Update method is called.

This method is not yet implemented.

  • Returns ILS_E_FAIL if unsuccessful.
StdAttr
Standard attribute of the Protocol object. Can be one of the following:
ILS_STDATTR_PROTOCOL_NAME = 13
ILS_STDATTR_MIME_TYPE = 14
ILS_STDATTR_PORT = 15
bstrValue
Null-terminated string for the protocol's standard attribute.

Up Arrow Back to IIlsProtocol Interface

Up Arrow Back to Protocol Object

Up Arrow Back to ILS Object Listing

IIlsProtocol::Update

HRESULT IIlsProtocol::Update(
    ULONG  *puReqID);

Reflects updated protocol information to the ILS server.

This method is not yet implemented.

  • Returns ILS_E_FAIL if unsuccessful.
puReqID
Address of a ULONG buffer to receive the request identifier.

This method is an asynchronous operation. The application receives the IIlsProtocolNotify::UpdateResult notification for the registration result.

Up Arrow Back to IIlsProtocol Interface

Up Arrow Back to Protocol Object

Up Arrow Back to ILS Object Listing

IConnectionPointContainer

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

IConnectionPoint

The IConnectionPoint_IIlsProtocol interface is instantiated from IConnectionPointContainer_IIlsProtocol. The Protocol object provides only one connection point—IID_IIlsProtocolNotify—for a client's sink object to receive the callback notification. The client must provide the IIlsProtocolNotify interface methods described in this section in the sink object.

IIlsProtocolNotify Interface

This interface is implemented by a client application that will receive notifications from a Protocol object.

UpdateResult

Up Arrow Back to Protocol Object

IIlsProtocolNotify::UpdateResult

HRESULT IIlsProtocolNotify::UpdateResult(
    ULONG  uReqID,
    HRESULT  hResult);

Notifies the Protocol object when an update request is made. If the request is successful, the updated information is propagated to the ILS server.

  • Returns S_OK if successful, or an error code otherwise.
uReqID
Request identifier matching the IIlsProtocol::Update method.
hResult
Modification result. Returns S_OK if the information is changed, or an error code otherwise.

Up Arrow Back to IIlsProtocolNotify Interface

Up Arrow Back to Protocol Object

Up Arrow Back to ILS Object Listing


Server Object

The Server object represents the ILS server with which the application interacts.

IIlsServer Interface

Up Arrow Back to ILS Reference

IIlsServer Interface

The IIlsServer interface is obtained from the IIlsMain::CreateServer method. The interface provides the methods described in this section.

SetAuthenticationMethod
SetBaseDN
SetCredential
SetDomain
SetLogonName
SetLogonPassword
SetTimeout

Up Arrow Back to Server Object

IIlsServer::SetAuthenticationMethod

HRESULT IIlsServer::SetAuthenticationMethod(
    ILS_ENUM_AUTH_METHOD  enumAuthMethod);

Sets the server authentication method to use when accessing this ILS server.

  • Returns S_OK if successful, or ILS_E_PARAMETER if enumAuthMethod is incorrect.
enumAuthMethod
Authentication method to use when accessing this server.

Up Arrow Back to IIlsServer Interface

Up Arrow Back to Server Object

Up Arrow Back to ILS Object Listing

IIlsServer::SetBaseDN

HRESULT SetBaseDN(
    [in]  BSTR bstrBaseDN );

Sets the LDAP distinguished name base the user is to register under. If this method is not called, the ILS 1.0 default is used.

  • Returns one of the following values:
    S_OK | Success.
    ILS_E_POINTER | bstrBaseDN is NULL.
    ILS_E_MEMORY | Unable to allocate enough memory for this request.
bstrBaseDN
LDAP distinguished name string, containing the organization and organizational unit specification. For example: "o=company, ou=division, ou=department".

The User object is registered according to the following rules:

  • Country—The country attribute of the User object will be used for the LDAP "c=" specification.
  • Common Name—The common name is the UserID field from the User object, thus "cn=userid".
  • BaseDN—The base DN is the organization and organizational unit specification.

Up Arrow Back to IIlsServer Interface

Up Arrow Back to Server Object

Up Arrow Back to ILS Object Listing

IIlsServer::SetCredential

HRESULT IIlsServer::SetCredential(
    BSTR  bstrCredential);

Sets the server access credential when accessing this ILS server.

  • Returns one of the following values:
    S_OK | Success.
    ILS_E_POINTER | bstrCredential is NULL.
    ILS_E_MEMORY | Unable to allocate enough memory for this request.
bstrCredential
Null-terminated string for the credential.

Up Arrow Back to IIlsServer Interface

Up Arrow Back to Server Object

Up Arrow Back to ILS Object Listing

IIlsServer::SetDomain

HRESULT IIlsServer::SetDomain(
    BSTR  bstrDomain);

Sets the Microsoft® Windows NT® domain when accessing this ILS server.

  • Returns one of the following values:
    S_OK | Success.
    ILS_E_POINTER | bstrDomain is NULL.
    ILS_E_MEMORY | Unable to allocate enough memory for this request.
bstrDomain
Null-terminated string for the Windows NT domain name.

Up Arrow Back to IIlsServer Interface

Up Arrow Back to Server Object

Up Arrow Back to ILS Object Listing

IIlsServer::SetLogonName

HRESULT IIlsServer::SetLogonName(
    BSTR  bstrLogonName);

Sets the logon name to use when accessing this ILS server.

  • Returns one of the following values:
    S_OK | Success.
    ILS_E_POINTER | bstrLogonName is NULL
    ILS_E_MEMORY | Unable to allocate enough memory for this request.
bstrLogonName
Null-terminated string for the logon name.

Up Arrow Back to IIlsServer Interface

Up Arrow Back to Server Object

Up Arrow Back to ILS Object Listing

IIlsServer::SetLogonPassword

HRESULT IIlsServer::SetLogonPassword(
    BSTR  bstrLogonPassword);

Sets the logon password to use when accessing this ILS server.

  • Returns one of the following values:
    S_OK | Success.
    ILS_E_POINTER | bstrLogonPassword is NULL.
    ILS_E_MEMORY | Unable to allocate enough memory for this request.
bstrLogonPassword
Null-terminated string for the logon password.

Up Arrow Back to IIlsServer Interface

Up Arrow Back to Server Object

Up Arrow Back to ILS Object Listing

IIlsServer::SetTimeout

HRESULT IIlsServer::SetTimeout(
    ULONG  uTimeoutInSec);

Sets the initial time-out period when registering with this ILS server.

  • Returns S_OK if successful.
uTimeoutInSec
Time-out period to use initially when accessing this ILS server.

Note that the time-out period is the initial amount suggested to the server; the ILS server can alter the time-out period unilaterally. The ILS client will honor any such changes and alter its time-out refresh frequency as necessary.

Up Arrow Back to IIlsServer Interface

Up Arrow Back to Server Object

Up Arrow Back to ILS Object Listing


Attributes Object

The Attributes object represents the set of application-specific information. The information is published by a user who registered on the ILS server.

IIlsAttributes Interface

Up Arrow Back to ILS Reference

IIlsAttributes Interface

The IIlsAttributes interface is obtained from the IIlsMain::CreateAttributes method. The interface provides the methods described in this section.

EnumAttributes
GetAttribute
SetAttribute
SetAttributeName

Up Arrow Back to Attributes Object

IIlsAttributes::EnumAttributes

HRESULT IIlsAttributes::EnumAttributes(
    [out] IEnumIlsNames  **ppEnumAttribute);

Returns the attribute enumerator. The application enumerates the attribute name from the enumerator.

  • Returns one of the following values:
    S_OK | Success.
    ILS_E_ACCESS_CONTROL | Attribute type is ILS_ATTRTYPE_NAME_ONLY.
    ILS_E_POINTER | ppEnumAttribute is NULL.
    ILS_E_MEMORY | Unable to allocate enough memory for this request.
ppEnumAttribute
Pointer to receive an attribute enumerator.

Up Arrow Back to IIlsAttributes Interface

Up Arrow Back to Attributes Object

Up Arrow Back to ILS Object Listing

IIlsAttributes::GetAttribute

HRESULT IIlsAttributes::GetAttribute(
    BSTR  bstrName,
    BSTR  *pbstrValue);

Retrieves the value of the specified attribute.

  • Returns one of the following values:
    S_OK | Success.
    ILS_E_POINTER | Address of return string is NULL, or Attribute name is NULL.
    ILS_E_PARAMETER | Attribute name is empty.
    ILS_E_ACCESS_CONTROL | Attribute type is ILS_ATTRTYPE_NAME_ONLY.
    ILS_E_MEMORY | Unable to allocate enough memory for this request.
    ILS_E_FAIL | Attribute not found.
bstrName
Null-terminated string for the attribute's name.
pbstrValue
Pointer to receive a null-terminated string for the attribute's value.

Up Arrow Back to IIlsAttributes Interface

Up Arrow Back to Attributes Object

Up Arrow Back to ILS Object Listing

IIlsAttributes::SetAttribute

HRESULT IIlsAttributes::SetAttribute(
    BSTR  bstrName,
    BSTR  bstrValue);

Adds a new attribute if the attribute name does not exist, or replaces the attribute value with the specified value if the attribute exists, or removes the attribute if the attribute exists and the bstrValue parameter is NULL.

  • Returns one of the following values:
    S_OK | Success.
    ILS_E_POINTER | Attribute name us NULL.
    ILS_E_PARAMETER | Attribute name is empty.
    ILS_E_ACCESS_CONTROL | Attribute type is ILS_ATTRTYPE_NAME_ONLY.
    ILS_E_MEMORY | Unable to allocate enough memory for this request.
bstrName
Null-terminated string for the attribute's name.
bstrValue
Null-terminated string for the attribute's value. If the parameter is NULL, the attribute is removed.

Up Arrow Back to IIlsAttributes Interface

Up Arrow Back to Attributes Object

Up Arrow Back to ILS Object Listing

IIlsAttributes::SetAttributeName

HRESULT IIlsAttributes::SetAttributeName(
    BSTR  bstrName);

Allows the application to specify the name of the attribute.

  • Returns one of the following values:
    S_OK | Success.
    ILS_E_ACCESS_CONTROL | Attribute type is ILS_ATTRTYPE_NAME_ONLY.
    ILS_E_POINTER | Attribute name is NULL.
    ILS_E_PARAMETER | Attribute name is empty.
    ILS_E_MEMORY | Unable to allocate enough memory for this request.
bstrName
Name of the attribute.

If the Attributes object is of the ILS_ATTRTYPE_NAME_ONLY type, the Attributes object is used to specify which extended attributes are to be retrieved from the server.

Up Arrow Back to IIlsAttributes Interface

Up Arrow Back to Attributes Object

Up Arrow Back to ILS Object Listing


Filter Object

The Filter object enables the application to specify a condition to which the enumeration result set must match. It is the server's responsibility to screen or filter the entire listing, and return only those results that match the specified filter.

There are two types of filters in the ILS interface:

  • Simple filter, each of which specifies a basic condition in the form of <Attribute><Relative Operator><Value>.
  • Composite filter, which is a logical accumulation of several simple filters. For example, "Last Name = Smith" is a simple filter, whereas "(LastName = Smith) AND ((FirstName != Mike) OR (FirstName != Jose))" is a composite filter.

Filters are created by the IIlsMain::CreateFilter or IIlsMain::StringToFilter method.

The Filter Object exposes the following interface:

IIlsFilter Interface

Up Arrow Back to ILS Reference

IIlsFilter Interface

The IIlsFilter interface is obtained from the IIlsMain::CreateFilter or IIlsMain::StringToFilter method. The interface provides the methods described in this section.

AddSubFilter
GetCount
RemoveSubFilter
SetAttributeValue
SetExtendedAttributeName
SetStandardAttributeName

Up Arrow Back to Filter Object

IIlsFilter::AddSubFilter

HRESULT IIlsFilter::AddSubFilter(
    IIlsFilter  *pFilter);

Adds a subfilter to the list of subfilters in a composite filter.

  • Returns one of the following values:
    S_OK | Success.
    ILS_E_FILTER_TYPE | Filter type is not ILS_FILTERTYPE_COMPOSITE.
    ILS_E_POINTER | Subfilter is not valid.
    ILS_E_MEMORY | Unable to allocate enough memory for this request.
pFilter
Address of the subfilter to be appended.

This method applies to composite filter operations.

Up Arrow Back to IIlsFilter Interface

Up Arrow Back to Filter Object

Up Arrow Back to ILS Object Listing

IIlsFilter::GetCount

HRESULT IIlsFilter::GetCount(
    ULONG  *pcElements);

Counts the number of subfilters in a composite filter.

  • Returns one of the following values:
    S_OK | Success.
    ILS_E_FILTER_TYPE | Filter type is not ILS_FILTERTYPE_COMPOSITE.
    ILS_E_POINTER | Address of the return buffer is NULL.
pcElements
Address of a ULONG buffer where the count is returned.

This method applies to composite filter operations.

Up Arrow Back to IIlsFilter Interface

Up Arrow Back to Filter Object

Up Arrow Back to ILS Object Listing

IIlsFilter::RemoveSubFilter

HRESULT IIlsFilter::RemoveSubFilter(
    IIlsFilter  *pFilter);

Removes a subfilter from the list of subfilters in a composite filter.

  • Returns one of the following values:
    S_OK | Success.
    ILS_E_FILTER_TYPE | Filter type is not ILS_FILTERTYPE_COMPOSITE.
    ILS_E_POINTER | Subfilter is not valid.
pFilter
Address of the subfilter to be removed.

This method applies to composite filter operations.

Up Arrow Back to IIlsFilter Interface

Up Arrow Back to Filter Object

Up Arrow Back to ILS Object Listing

IIlsFilter::SetAttributeValue

HRESULT IIlsFilter::SetAttributeValue(
    BSTR bstrAttrValue);

Sets the value of a simple filter.

  • Returns one of the following values:
    S_OK | Success.
    ILS_E_FILTER_TYPE | Filter type is not ILS_FILTERTYPE_SIMPLE.
    ILS_E_POINTER | Attribute value string is NULL.
    ILS_E_MEMORY | Unable to allocate enough memory for this request.
bstrAttrValue
Buffer holding the value that the simple filter is to match.

This method applies to simple filter operations.

Up Arrow Back to IIlsFilter Interface

Up Arrow Back to Filter Object

Up Arrow Back to ILS Object Listing

IIlsFilter::SetExtendedAttributeName

HRESULT IIlsFilter:: SetExtendedAttributeName(
    BSTR bstrAnyAttrName);

Sets the attribute of a simple filter to be a nonstandard ILS attribute.

  • Returns one of the following values:
    S_OK | Success.
    ILS_E_FILTER_TYPE | Filter type is not ILS_FILTERTYPE_SIMPLE.
    ILS_E_POINTER | Attribute name is NULL.
    ILS_E_MEMORY | Unable to allocate enough memory for this request.
bstrAnyAttrName
Buffer holding the name of the nonstandard attribute.

This method applies to simple filter operations.

Up Arrow Back to IIlsFilter Interface

Up Arrow Back to Filter Object

Up Arrow Back to ILS Object Listing

IIlsFilter::SetStandardAttributeName

HRESULT IIlsFilter::SetStandardAttributeName(
    ILS_STD_ATTR_NAME  usrStdAttr);

Sets the attribute of a simple filter to be a standard ILS attribute.

  • Returns one of the following values:
    S_OK | Success.
    ILS_E_FILTER_TYPE | Filter type is not ILS_FILTERTYPE_SIMPLE.
    ILS_E_PARAMETER | Attribute name is incorrect.
usrStdAttr
Standard attribute to use for this filter.

This method applies to simple filter operations.

Up Arrow Back to IIlsFilter Interface

Up Arrow Back to Filter Object

Up Arrow Back to ILS Object Listing


Enumerator Object

This section defines enumerator interfaces that take a snapshot of the current state.

IEnumIlsUser Interface
IEnumIlsNames Interface
IEnumIlsProtocol Interface

Up Arrow Back to ILS Reference

IEnumIlsUser Interface

This interface enables you to manipulate the users in the enumerated list.

Clone
Next
Reset
Skip

Up Arrow Back to Enumerator Object

IEnumIlsUser::Clone

HRESULT Clone(
    [out] IEnumIlsUser **ppEnumUser);

Creates another enumerator that contains the same enumeration state as the current one.

  • Returns S_OK if successful, or ILS_E_MEMORY if unable to allocate enough memory for this request.
ppEnumUser
Indirect pointer to the enumeration interface on the Enumerator object. If the method is unsuccessful, this parameter's value is undefined.

Up Arrow Back to IEnumIlsUser Interface

Up Arrow Back to Enumerator Object

Up Arrow Back to ILS Object Listing

IEnumIlsUser::Next

HRESULT Next(
    [in] ULONG cUsers,
    [out] IIlsUser **rgpUsers,
    [out] ULONG *pcFetched);

Returns the next element in the list, starting at the current index.

  • Returns one of the following values:
    S_OK | Success.
    S_FALSE | No more names in enumerator.
    ILS_E_POINTER | Address of output buffer is NULL.
    ILS_E_PARAMETER | Enumerator is empty.
cUsers
Number of elements requested.
rgpUsers
Address of an instance of the User object.
pcFetched
Number of elements received.

When the enumerated type is itself an interface pointer, this method must call AddRef through each pointer before return, and the client must later call Release through each pointer.

Up Arrow Back to IEnumIlsUser Interface

Up Arrow Back to Enumerator Object

Up Arrow Back to ILS Object Listing

IEnumIlsUser::Reset

HRESULT Reset();

Resets the enumeration sequence to the beginning.

  • Returns S_OK if successful.

Up Arrow Back to IEnumIlsUser Interface

Up Arrow Back to Enumerator Object

Up Arrow Back to ILS Object Listing

IEnumIlsUser::Skip

HRESULT Skip(
    [in] ULONG cUsers);

Skips over a specified number of items in the enumeration sequence.

  • Returns one of the following values:
    S_OK | Success.
    S_FALSE | No more names in enumerator.
    ILS_E_PARAMETER | Enumerator is empty.
cUsers
Number of elements to be skipped.

Up Arrow Back to IEnumIlsUser Interface

Up Arrow Back to Enumerator Object

Up Arrow Back to ILS Object Listing

IEnumIlsNames Interface

This interface enables you to manipulate the names in the enumerated list.

Clone
Next
Reset
Skip

Up Arrow Back to Enumerator Object

IEnumIlsNames::Clone

HRESULT Clone(
    [out] IEnumIlsNames **ppEnumName);

Creates another enumerator that contains the same enumeration state as the current one.

  • Returns one of the following values:
    S_OK | Success.
    ILS_E_MEMORY | Unable to allocate enough memory for this request.
    ILS_E_POINTER | Return buffer is NULL.
ppEnumName
Indirect pointer to the enumeration interface on the Enumerator object. If the method is unsuccessful, this parameter's value is undefined.

Up Arrow Back to IEnumIlsNames Interface

Up Arrow Back to Enumerator Object

Up Arrow Back to ILS Object Listing

IEnumIlsNames::Next

HRESULT Next(
    [in] ULONG cNames,
    [out] BSTR *rgpbstrName,
    [out] ULONG *pcFetched);

Returns the next element in the list, starting at the current index.

  • Returns one of the following values:
    S_OK | Success.
    S_FALSE | No more names in enumerator.
    ILS_E_POINTER | Address of the output buffer is NULL.
    ILS_E_PARAMETER | Enumerator is empty.
cNames
Number of elements requested.
rgpbstrName
Address of a string containing the name.
pcFetched
Number of elements received.

When the enumerated type is itself an interface pointer, this method must call AddRef through each pointer before return, and the client must later call Release through each pointer.

Up Arrow Back to IEnumIlsNames Interface

Up Arrow Back to Enumerator Object

Up Arrow Back to ILS Object Listing

IEnumIlsNames::Reset

HRESULT Reset();

Resets the enumeration sequence to the beginning.

  • Returns S_OK if successful.

Up Arrow Back to IEnumIlsNames Interface

Up Arrow Back to Enumerator Object

Up Arrow Back to ILS Object Listing

IEnumIlsNames::Skip

HRESULT Skip(
    [in] ULONG cNames);

Skips over a specified number of items in the enumeration sequence.

  • Returns one of the following values:
    S_OK | Success.
    S_FALSE | No more names in enumerator.
    ILS_E_PARAMETER | Enumerator is empty.
cNames
Number of elements to be skipped.

Up Arrow Back to IEnumIlsNames Interface

Up Arrow Back to Enumerator Object

Up Arrow Back to ILS Object Listing

IEnumIlsProtocol Interface

This interface enables you to manipulate the protocols in the enumerated list.

Clone
Next
Reset '
Skip

Up Arrow Back to Enumerator Object

IEnumIlsProtocol::Clone

HRESULT Clone(
    [out] IEnumIlsProtocol **ppEnumProtocol);

Creates another enumerator that contains the same enumeration state as the current one.

  • Returns S_OK if successful, or ILS_E_MEMORY if unable to allocate enough memory for this request.
ppEnumProtocol
Indirect pointer to the enumeration interface on the Enumerator object. If the method is unsuccessful, this parameter's value is undefined.

Up Arrow Back to IEnumIlsProtocol Interface

Up Arrow Back to Enumerator Object

Up Arrow Back to ILS Object Listing

IEnumIlsProtocol::Next

HRESULT Next(
    [in] ULONG cProtocols,
    [out] IIlsProtocol **rgpProtocol,
    [out] ULONG *pcFetched);

Returns the next element in the list, starting at the current index.

  • Returns one of the following values:
    S_OK | Success.
    S_FALSE | No more names in enumerator.
    ILS_E_POINTER | Address of output buffer is NULL.
    ILS_E_PARAMETER | Enumerator is empty.
cProtocols
Number of elements requested.
rgpProtocol
Address of an instance of the Protocol object.
pcFetched
Number of elements received.

When the enumerated type is itself an interface pointer, this method must call AddRef through each pointer before return, and the client must later call Release through each pointer.

Up Arrow Back to IEnumIlsProtocol Interface

Up Arrow Back to Enumerator Object

Up Arrow Back to ILS Object Listing

IEnumIlsProtocol::Reset

HRESULT Reset();

Resets the enumeration sequence to the beginning.

  • Returns S_OK if successful.

Up Arrow Back to IEnumIlsProtocol Interface

Up Arrow Back to Enumerator Object

Up Arrow Back to ILS Object Listing

IEnumIlsProtocol::Skip

HRESULT Skip(
    [in] ULONG cProtocols);

Skips over a specified number of items in the enumeration sequence.

  • Returns one of the following values:
    S_OK | Success.
    S_FALSE | No more names in enumerator.
    ILS_E_PARAMETER | Enumerator is empty.
cProtocols
Number of elements to be skipped.

Up Arrow Back to IEnumIlsProtocol Interface

Up Arrow Back to Enumerator Object

Up Arrow Back to ILS Object Listing


ActiveX Control Reference

This document describes the objects, properties, and methods exposed by the Microsoft® NetMeeting™ ActiveX™ control. By hosting this control, an application can provide collaborative services such as conferencing, file and data transfer, and application sharing to users.

ActiveX Control Objects, Properties, Methods, and Events Listing

Conference Manager Object

User Object

Conference Object

Member Object

Channel Object

Client Application Object

Sharable Application Object

Data Transfer Channel

File Transfer Channel

Up Arrow Back to References


ActiveX Control Objects, Properties, Methods, and Events Listing

All events fired by the control go through the Conference Manager object. The following hierarchy shows the control's objects, and the properties, methods, and events for each. Brackets indicate the object from which each event originates.
Conference Manager Object
IConferenceManagerX
Properties | ConferenceCapabilities
 | RemoteConference
 | Conferences
 | Users
 | NullObject
Methods | Initialize
 | Uninitialize
 | CreateConference
 | CreateUser
 | Advise
 | Unadvise
Events | InvitedToConference {Conference Manager}
 | ConferenceCreated {Conference Manager}
 | StateChanged {Conference}
 | RequestToJoin {Conference}
 | MemberChanged {Conference}
 | ChannelChanged {Conference}
 | DataSent {Channel}
 | DataReceived {Channel}
 | FileSent {Channel}
 | FileReceived {Channel}
 | AppSharingStatusChanged {Channel}
 | AppControlStatusChanged {Channel}
User Object
IConfUserX
Properties | Name
 | Type
 | ConferenceCapabilities
 | IsMCU
 | Conferences
 | Applications
Conference Object
IConferenceX
Properties | Name
 | Capabilities
 | State
 | Members
 | Applications
 | ChannelInterfaces
 | Channels
Methods | Invite
 | AcceptInvite
 | RejectInvite
 | Join
 | AcceptJoin
 | RejectJoin
 | CreateChannel
 | Leave
 | IsSameAs
 | Advise
 | Unadvise
Member Object
IConfMemberX
Properties | Name
 | Type
 | ConferenceCapabilities
 | IsMCU
 | Conferences
 | Applications
 | Conference
 | IsSelf
Method | IsSameAs
Channel Object
IConfChannelX
Properties | Conference
 | Interface
 | Members
 | Object
Methods | IncludeMember
 | ExcludeMember
 | IsSameAs
IConfDataExchangeX
Methods | SendData
 | Advise
 | Unadvise
IConfFileExchangeX
Property | GetReceiveFileDir
 | SetReceiveFileDir
Methods | SendFile
 | Cancel
 | Advise
 | Unadvise
IConfAppSharingX
Property | SharableApps
Methods | Advise
 | Unadvise
IConfAppControlX
Methods | StartRemoteInstance
 | Advise
 | Unadvise
Client Application Object
IConfApplicationX
Properties | GUID
 | Name
Sharable Application Object
IConfShareAppX
Properties | Name
 | ShareState
Methods | Share
 | Unshare
Data Transfer Channel
IConfDataTransferX
Properties | BytesTransferred
 | String
 | Array
File Transfer Channel
IConfFileTransferX
Properties | Name
 | BytesTransferred
 | TotalSize
 | State
Method | IsSameAs

Up Arrow Back to ActiveX Reference


Conference Manager Object

The Conference Manager object provides the following interface:

  • IConferenceManagerX

Up Arrow Back to ActiveX Reference

IConferenceManagerX

This interface provides the following properties:

  • ConferenceCapabilities
  • RemoteConference
  • Conferences
  • Users
  • NullObject

and the following methods:

  • Initialize
  • Uninitialize
  • CreateConference
  • CreateUser
  • Advise
  • Unadvise

Up Arrow Back to Conference Manager Object

IConferenceManagerX Properties

This section describes the properties for the IConferenceManagerX interface.

IConferenceManagerX::ConferenceCapabilities

HRESULT ConferenceCapabilities(
    LONG *plConfCaps);

Indicates which types of conferences (audio, data, or video) are available on the local computer.

  • Returns S_OK if the requested number of elements was returned, or E_UNEXPECTED if the Conference Manager object was not initialized.
plConfCaps
Field with one or more of the following bits set:
0x00 | Not capable of conferencing.
0x01 | Data conferencing.
0x02 | Audio conferencing.
0x04 | Video conferencing.

Up Arrow Back to IConferenceManagerX Interface

Up Arrow Back to Conference Manager Object

Up Arrow Back to ActiveX Listing

IConferenceManagerX::RemoteConference

HRESULT RemoteConference(
    IConferenceX **ppConference);

Indicates the Conference from which an application was activated by a remote node. This Conference object should then be used to communicate with the remote node. The calling application should use the Conference object to communicate with the remote node.

  • Returns one of the following values:
    S_OK | Success. The requested number of elements was returned.
    E_OUTOFMEMORY | Memory could not be allocated to service the request.
    E_UNEXPECTED | The Conference Manager object was not initialized.
ppConference
Address to receive an instance of the Conference object.

Up Arrow Back to IConferenceManagerX Interface

Up Arrow Back to Conference Manager Object

Up Arrow Back to ActiveX Listing

IConferenceManagerX::Conferences

HRESULT Conferences(
    IConferences **ppConferences);

Returns the collection of existing Conference objects. If there is a conference in progress, the person setting up the conference can choose to use that one instead of starting a new one.

  • Returns one of the following values:
    S_OK | Success. The requested number of elements was returned.
    E_OUTOFMEMORY | Memory could not be allocated to service the request.
    E_UNEXPECTED | The Conference Manager object was not initialized.
ppConferences
Address of a collection of Conference objects.

Up Arrow Back to IConferenceManagerX Interface

Up Arrow Back to Conference Manager Object

Up Arrow Back to ActiveX Listing

IConferenceManagerX::Users

HRESULT Users(
    IConfUsers **ppUsers);

Indicates a collection of users who can become participants in a conference. It returns a pointer to a collection of existing User objects.

  • Returns one of the following values:
    S_OK | Success. The requested number of elements was returned.
    E_OUTOFMEMORY | Memory could not be allocated to service the request.
    E_UNEXPECTED | The Conference Manager object was not initialized.
ppUsers
Address of a collection of User objects.

This method is not supported in the current version.

Up Arrow Back to IConferenceManagerX Interface

Up Arrow Back to Conference Manager Object

Up Arrow Back to ActiveX Listing

IConferenceManagerX::NullObject

HRESULT NullObject(
    IDispatch **pIDispatch);

Indicates the IDispatch pointer set to null.

  • Returns S_OK if the requested number of elements was returned.
pIDispatch
Address of the IDispatch pointer to be set to null.

Up Arrow Back to IConferenceManagerX Interface

Up Arrow Back to Conference Manager Object

Up Arrow Back to ActiveX Listing

IConferenceManagerX Methods

This section describes the methods for the IConferenceManagerX interface.

IConferenceManagerX::Initialize

HRESULT Initialize(
    BSTR bstrID,
    BOOLEAN *pfSucceeded);

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

  • Returns one of the following values:
    S_OK | Success. The requested number of elements was returned.
    E_INVALIDARG | The bstrID parameter is invalid.
    E_OUTOFMEMORY | Memory could not be allocated to service the request.
    E_UNEXPECTED | An unknown error occurred.
bstrID
Interface ID of the calling application (textual description of a globally unique identifier [GUID]).
pfSucceeded
TRUE if the conference was initialized successfully, or FALSE otherwise.

Up Arrow Back to IConferenceManagerX Interface

Up Arrow Back to Conference Manager Object

Up Arrow Back to ActiveX Listing

IConferenceManagerX::Uninitialize

HRESULT Uninitialize(void);

Release memory and other resources within the process to facilitate a subsequent call to Initialize. Must be called by scripts and Visual Basic® applications before the control is unloaded.

  • Returns S_OK if successful, or E_UNEXPECTED if an unknown error occurred.

If the Initialize method has not yet been called, it is not necessary to call Uninitialize.

Up Arrow Back to IConferenceManagerX Interface

Up Arrow Back to Conference Manager Object

Up Arrow Back to ActiveX Listing

IConferenceManagerX::CreateConference

HRESULT CreateConference(
    BSTR bstrName,
    LONG lConfCaps,
    IConferenceX **ppConference);

Retrieves an instance of a new Conference object.

  • Returns one of the following values:
    S_OK | Success. The requested number of elements was returned.
    E_OUTOFMEMORY | Memory could not be allocated to service the request.
    E_UNEXPECTED | The Conference Manager object was not initialized.
bstrName
String for the conference name.
lConfCaps
Bitmap for conferencing capabilities. See IConferenceManagerX::ConferenceCapabilities for a description of the values.
ppConference
Address to receive an instance of the Conference object.

Up Arrow Back to IConferenceManagerX Interface

Up Arrow Back to Conference Manager Object

Up Arrow Back to ActiveX Listing

IConferenceManagerX::CreateUser

HRESULT CreateUser(
    BSTR bstrName,
    LONG lType,
    IConfUserX **ppUser);

Retrieves an instance of a new User object.

  • Returns one of the following values:
    S_OK | Success. The requested number of elements was returned.
    E_OUTOFMEMORY | Memory could not be allocated to service the request.
    E_UNEXPECTED | The Conference Manager object was not initialized.
bstrName
String for the user's name or address.
lType
Constant that indicates the type of the user name/address. Can be one of the following values:
CNF_USER_IP | The user name contains an IP address.
CNF_USER_MACHINENAME | The user name contains a computer name.
CNF_USER_UNKNOWN | The transport is unknown.
ppUser
Address to receive an instance of the User object.

Up Arrow Back to IConferenceManagerX Interface

Up Arrow Back to Conference Manager Object

Up Arrow Back to ActiveX Listing

IConferenceManagerX::Advise

HRESULT Advise(void);

Enables advisements (events) for the IConferenceManagerX interface.

  • Returns S_OK if successful, or E_UNEXPECTED if an unknown error occurred.

Up Arrow Back to IConferenceManagerX Interface

Up Arrow Back to Conference Manager Object

Up Arrow Back to ActiveX Listing

IConferenceManagerX::Unadvise

HRESULT Unadvise(void);

Disables advisements (events) for the IConferenceManagerX interface.

  • Returns S_OK if successful, or E_UNEXPECTED if an unknown error occurred.

Up Arrow Back to IConferenceManagerX Interface

Up Arrow Back to Conference Manager Object

Up Arrow Back to ActiveX Listing

Events

This section describes the events fired by the control. All events are fired by the Conference Manager object.

InvitedToConference

void InvitedToConference(
    IConfUserX *pUser,
    IConferenceX *pConference);

Retrieves a pointer to the conference that the called application is being invited to join.

pUser
User who invited the local computer to the conference.
pConference
Instance of the Conference object.

This event is not supported in the current version.

Up Arrow Back to IConferenceManagerX Interface

Up Arrow Back to Conference Manager Object

Up Arrow Back to ActiveX Listing

ConferenceCreated

void ConferenceCreated(
    IConferenceX *pConference);

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

pConference
Instance of the Conference object.

Up Arrow Back to IConferenceManagerX Interface

Up Arrow Back to Conference Manager Object

Up Arrow Back to ActiveX Listing

StateChanged

void StateChanged(
    IConferenceX *pConference,
    LONG lConfState,
    LONG hr);

Fires when the status of the conference has changed.

pConference
Instance of the Conference object.
lConfState
State of the conference.
hr
Result of the status change operation.

Up Arrow Back to IConferenceManagerX Interface

Up Arrow Back to Conference Manager Object

Up Arrow Back to ActiveX Listing

RequestToJoin

void RequestToJoin(
    IConferenceX *pConference,
    IConfUserX *pUser);

Fires when a user has made a request to join a conference.

pConference
Instance of the Conference object to be joined.
pUser
Instance of the User object that wants to join the conference.

This event is not supported in the current version.

Up Arrow Back to IConferenceManagerX Interface

Up Arrow Back to Conference Manager Object

Up Arrow Back to ActiveX Listing

MemberChanged

void MemberChanged(
    IConferenceX *pConference,
    IConfMemberX *pMember,
    LONG lNotify);

Fires when the member roster for the conference has changed (someone has joined or left the conference).

pConference
Instance of the Conference object.
pMember
Instance of the Member object that is added or removed from the conference.
lNotify
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.

Up Arrow Back to IConferenceManagerX Interface

Up Arrow Back to Conference Manager Object

Up Arrow Back to ActiveX Listing

ChannelChanged

void ChannelChanged(
    IConferenceX *pConference,
    IConfChannelX *pChannel,
    LONG lNotify);

Fires when a channel has been added or removed from a conference.

pConference
Instance of the Conference object.
pChannel
Instance of the Channel object that is added or removed from the conference
lNotify
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.

Up Arrow Back to IConferenceManagerX Interface

Up Arrow Back to Conference Manager Object

Up Arrow Back to ActiveX Listing

DataSent

void DataSent(
    IConfDataExchangeX *pDataExchange,
    IConfMemberX *pMember,
    IConfDataTransferX *pDataTransfer,
    LONG hr);

Fires when data has been sent, and indicates the result of the operation

pDataExchange
Address of the ConfDataExchange object used to send the data.
pMember
Instance of the Member object that received the data. This parameter's value is NULL if the data was sent to all members.
pDataTransfer
IConfDataTransferX object.
hr
Result of the data transfer.

Up Arrow Back to IConferenceManagerX Interface

Up Arrow Back to Conference Manager Object

Up Arrow Back to ActiveX Listing

DataReceived

void DataReceived(
    IConfDataExchangeX *pDataExchange,
    IConfMemberX *pMember,
    IConfDataTransferX *pDataTransfer,
    LONG hr);

Fires when data has been received.

pDataExchange
Address to the ConfDataExchange object used to send the data
pMember
Instance of the Member object that sent the data.
pDataTransfer
IConfDataTransferX object.
hr
Result of the data transfer.

The data buffer is valid only during the event notification, that is, the data buffer is freed by the source object after the event notification.

Up Arrow Back to IConferenceManagerX Interface

Up Arrow Back to Conference Manager Object

Up Arrow Back to ActiveX Listing

FileSent

void FileSent(
    IConfFileExchangeX *pFileExchange,
    IConfMemberX *pMember,
    IConfFileTransferX *pFileTransfer,
    LONG hr);

Fires when a file has been sent.

pFileExchange
Address of the File Exchange object that was used to send the file.
pMember
Instance of the Member object where the file is sent. Will be NULL if the file was sent to everyone.
pFileTransfer
Instance of the File Transfer Channel.
hr
Result of the data transfer.

This event can be fired multiple times to get progress information from the ConfFileTransfer object.

Up Arrow Back to IConferenceManagerX Interface

Up Arrow Back to Conference Manager Object

Up Arrow Back to ActiveX Listing

FileReceived

void FileReceived(
    IConfFileExchangeX *pFileExchange,
    IConfMemberX *pMember,
    IConfFileTransferX *pFileTransfer,
    LONG hr);

Fires when a file has been received.

pFileExchange
Address of the ConfFileExchange object that was used to receive the file.
pMember
Instance of the Member object where the file is received.
pFileTransfer
Instance of the File Transfer Channel.
hr
Result of the data transfer.

This event can be fired multiple times to get progress information.

Up Arrow Back to IConferenceManagerX Interface

Up Arrow Back to Conference Manager Object

Up Arrow Back to ActiveX Listing

AppSharingStatusChanged

void AppSharingStatusChanged(
    IConfAppSharingX *pAppSharing,
    IConfShareAppX *pShrApp,
    LONG lAppStatus
    LONG hr);

Fires when a sharable application becomes shared or unshared.

pAppSharing
Address of the App Sharing channel.
pShrApp
Instance of the Sharable Application object.
lAppStatus
Current sharing status. Can be one of the following values:
CNF_SHR_SHARED | The application is shared.
CNF_SHR_UNSHARED | The application is not shared.
hr
Result of the application sharing operation.

Up Arrow Back to IConferenceManagerX Interface

Up Arrow Back to Conference Manager Object

Up Arrow Back to ActiveX Listing

AppControlStatusChanged

void AppControlStatusChanged(
    IConfAppControlX *pAppControl,
    IConfMemberX *pMember,
    IConfApplicationX *pApplication,
    LONG lAppStatus
    LONG hr);

Fires when the remote instance of an application on a member's computer changes its status.

pAppControl
Address of the App Control channel.
pMember
Member object whose application instance is changing its status.
pApplication
Instance of the Application object.
lAppStatus
Current sharing status for application invocation. Can be one of the following values:
CNF_APP_STARTED | The remote instance of the application is started.
CNF_APP_STOPPED | The remote instance of the application is stopped.
CNF_APP_UNKNOWN | The state of the remote instance of the application is unknown.
hr
Result of the application sharing operation.

Up Arrow Back to IConferenceManagerX Interface

Up Arrow Back to Conference Manager Object

Up Arrow Back to ActiveX Listing


User Object

The User object provides the following interface:

  • IConfUserX

Up Arrow Back to ActiveX Reference

IConfUserX

This interface provides the following properties:

  • Name
  • Type
  • ConferenceCapabilities
  • IsMCU
  • Conferences
  • Applications

Up Arrow Back to User Object

IConfUserX Properties

This section describes the properties for the IConfUserX interface.

IConfUserX::Name

HRESULT Name(
    BSTR *pbstrName);

Indicates a user name string.

  • Returns one of the following values:
    S_OK | Success. The requested number of elements was returned.
    E_OUTOFMEMORY | Memory could not be allocated to service the request.
    E_UNEXPECTED | An unknown error occurred.
pbstrName
Address to receive a string for the user name or address.

Up Arrow Back to IConfUserX Interface

Up Arrow Back to User Object

Up Arrow Back to ActiveX Listing

IConfUserX::Type

HRESULT Type(
    LONG *plType);

Indicates the type of name for the User object.

  • Returns S_OK if the requested number of elements was returned, or E_UNEXPECTED if an unknown error occurred.
plType
Address of the type of name of the user.

Up Arrow Back to IConfUserX Interface

Up Arrow Back to User Object

Up Arrow Back to ActiveX Listing

IConfUserX::ConferenceCapabilities

HRESULT ConferenceCapabilities(
    LONG *plConfCaps);

Indicates which types of conferences (audio, data, or video) are available on the user's computer.

  • Returns S_OK if the requested number of elements was returned, or E_UNEXPECTED if an unknown error occurred.
plConfCaps
Address of a buffer that upon return will contain the capabilities of the computer.

This property is not supported in the current version.

Up Arrow Back to IConfUserX Interface

Up Arrow Back to User Object

Up Arrow Back to ActiveX Listing

IConfUserX::IsMCU

HRESULT IsMCU(
    BOOLEAN *pfMCU);

Indicates whether the user is a multipoint control unit (MCU).

  • Returns S_OK if the user is an MCU, or S_FALSE if not.
pfMCU
TRUE if the user is an MCU, or FALSE otherwise.

This property is not supported in the current version.

Up Arrow Back to IConfUserX Interface

Up Arrow Back to User Object

Up Arrow Back to ActiveX Listing

IConfUserX::Conferences

HRESULT Conferences(
    IConferences **ppConferences);

Indicates a collection of Conference objects that a user is participating in.

  • Returns one of the following values:
    S_OK | Success. The requested number of elements was returned.
    E_OUTOFMEMORY | Memory could not be allocated to service the request.
    E_UNEXPECTED | An unknown error occurred.
ppConferences
Address of a collection of conference objects.

This property is not supported in the current version.

Up Arrow Back to IConfUserX Interface

Up Arrow Back to User Object

Up Arrow Back to ActiveX Listing

IConfUserX::Applications

HRESULT Applications(
    IConfApplications **ppApplications);

Indicates a collection of Client Application objects for a user.

  • Returns one of the following values:
    S_OK | Success. The requested number of elements was returned.
    E_OUTOFMEMORY | Memory could not be allocated to service the request.
    E_UNEXPECTED | An unknown error occurred.
ppApplications
Address of a collection of Client Application objects.

This property is not supported in the current version.

Up Arrow Back to IConfUserX Interface

Up Arrow Back to User Object

Up Arrow Back to ActiveX Listing


Conference Object

The Conference object provides the following interface:

  • IConferenceX

Up Arrow Back to ActiveX Reference

IConferenceX

This interface provides the following properties:

  • Name
  • Capabilities
  • State
  • Members
  • Applications
  • ChannelInterfaces
  • Channels

and the following methods:

  • Invite
  • AcceptInvite
  • RejectInvite
  • Join
  • AcceptJoin
  • RejectJoin
  • CreateChannel
  • Leave
  • IsSameAs
  • Advise
  • Unadvise

Up Arrow Back to Conference Object

IConferenceX Properties

This section describes the properties for the IConferenceX interface.

IConferenceX::Name

HRESULT Name(
    BSTR *pbstrName);

Indicates a conference name string. The conference name is the name passed in when the object is created by CreateConference, or is the name that exists when another user's conference is joined.

  • Returns S_OK if the requested number of elements was returned, or E_UNEXPECTED if an unknown error occurred.
pbstrName
Address to receive a string for the conference name.

Up Arrow Back to IConferenceX Interface

Up Arrow Back to Conference Object

Up Arrow Back to ActiveX Listing

IConferenceX::Capabilities

HRESULT Capabilities(
    LONG *plConfCaps);

Indicates which types of conferences (audio, data, video) the conference was originally created with.

  • Returns S_OK if the requested number of elements was returned, or E_UNEXPECTED if an unknown error occurred.
plConfCaps
Address of a buffer that contains the capabilities of the conference.

Up Arrow Back to IConferenceX Interface

Up Arrow Back to Conference Object

Up Arrow Back to ActiveX Listing

IConferenceX::State

HRESULT State(
    LONG *plConfState);

Indicates the state of the conference.

  • Returns S_OK if the requested number of elements was returned, or E_UNEXPECTED if an unknown error occurred.
plConfState
Address to receive a conference state. Can receive one of the following values:
CNF_STATE_ACTIVE | The conference is active and can be used.
CNF_STATE_IDLE | The conference is idle (just created).
CNF_STATE_INITIALIZING | The conference is being initialized.
CNF_STATE_OFFERED | The conference is offered.
CNF_STATE_STOPPING | The conference is being terminated.

Up Arrow Back to IConferenceX Interface

Up Arrow Back to Conference Object

Up Arrow Back to ActiveX Listing

IConferenceX::Members

HRESULT Members(
    IConfMembers **ppMembers);

Indicates a collection of existing Member objects when a conference is active.

  • Returns one of the following values:
    S_OK | Success. The requested number of elements was returned.
    E_OUTOFMEMORY | Memory could not be allocated to service the request.
    E_UNEXPECTED | An unknown error occurred.
ppMembers
Address of a collection of Member objects.

Up Arrow Back to IConferenceX Interface

Up Arrow Back to Conference Object

Up Arrow Back to ActiveX Listing

IConferenceX::Applications

HRESULT Applications(
    IConfApplications **ppApplications);

Indicates a collection of Client Application objects available to this conference.

  • Returns one of the following values:
    S_OK | Success. The requested number of elements was returned.
    E_OUTOFMEMORY | Memory could not be allocated to service the request.
    E_UNEXPECTED | An unknown error occurred.
ppApplications
Address of a collection of Client Application objects.

Up Arrow Back to IConferenceX Interface

Up Arrow Back to Conference Object

Up Arrow Back to ActiveX Listing

IConferenceX::ChannelInterfaces

HRESULT ChannelInterfaces(
    IChanInterfaces **ppChanInterfaces);

Indicates a collection of Channel interfaces available to the conference. The interfaces signify how the channel can be used.

  • Returns one of the following values:
    S_OK | Success. The requested number of elements was returned.
    E_OUTOFMEMORY | Memory could not be allocated to service the request.
    E_UNEXPECTED | An unknown error occurred.
ppChanInterfaces
Address to a collection of Channel interfaces.

Up Arrow Back to IConferenceX Interface

Up Arrow Back to Conference Object

Up Arrow Back to ActiveX Listing

IConferenceX::Channels

HRESULT Channels(
    IConfChannels **ppChannels);

Indicates a collection of Channel objects available to the conference.

  • Returns one of the following values:
    S_OK | Success. The requested number of elements was returned.
    E_OUTOFMEMORY | Memory could not be allocated to service the request.
    E_UNEXPECTED | An unknown error occurred.
ppChannels
Address of a collection of Channel objects.

Up Arrow Back to IConferenceX Interface

Up Arrow Back to Conference Object

Up Arrow Back to ActiveX Listing

IConferenceX Methods

This section describes the methods for the IConferenceX interface.

IConferenceX::Invite

HRESULT Invite(
    IConfUserX *pUser,
    BOOLEAN *pfSucceeded);

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

  • Returns S_OK if the requested number of elements was returned, or E_UNEXPECTED if an unknown error occurred.
pUser
Instance of the User object.
pfSucceeded
TRUE if the invitation is accepted, or FALSE otherwise.

This method is asynchronous (an event notification will be returned later if the invitee accepts).

Up Arrow Back to IConferenceX Interface

Up Arrow Back to Conference Object

Up Arrow Back to ActiveX Listing

IConferenceX::AcceptInvite

HRESULT AcceptInvite(
    BOOLEAN *pfSucceeded);

Accepts an invitation to a conference.

  • Returns S_OK if the requested number of elements was returned, or E_UNEXPECTED if an unknown error occurred.
pfSucceeded
TRUE if the invitation is accepted, or FALSE otherwise.

This method will not be implemented for the first release because the underlying Win32® APIs do not support it. For the first release, invitations will have to be accepted from Microsoft® NetMeeting™.

Up Arrow Back to IConferenceX Interface

Up Arrow Back to Conference Object

Up Arrow Back to ActiveX Listing

IConferenceX::RejectInvite

HRESULT RejectInvite(
    BOOLEAN *pfSucceeded);

Rejects an invitation to a conference.

  • Returns S_OK if the requested number of elements was returned, or E_UNEXPECTED if an unknown error occurred.
pfSucceeded
TRUE if the user who rejects the invitation is not added to the conference, or FALSE otherwise.

This method will not be implemented for the first release because the underlying Win32 APIs do not support it. For the first release, invitations will have to be rejected from Microsoft NetMeeting.

Up Arrow Back to IConferenceX Interface

Up Arrow Back to Conference Object

Up Arrow Back to ActiveX Listing

IConferenceX::Join

HRESULT Join(
    IConfUserX *pUser,
    BOOLEAN *pfSucceeded);

Joins a user who already has a conference running.

  • Returns S_OK if the requested number of elements was returned, or E_UNEXPECTED if an unknown error occurred.
pUser
Instance of the User object.
pfSucceeded
TRUE if the join is successful, or FALSE otherwise.

Up Arrow Back to IConferenceX Interface

Up Arrow Back to Conference Object

Up Arrow Back to ActiveX Listing

IConferenceX::AcceptJoin

HRESULT AcceptJoin(
    IConfUserX *pUser,
    BOOLEAN *pfSucceeded);

Accepts a request from a user to join a conference.

  • Returns S_OK if the requested number of elements was returned, or E_UNEXPECTED if an unknown error occurred.
pUser
Instance of the User object.
pfSucceeded
TRUE if the join is successful, or FALSE otherwise.

This method will not be implemented for the first release because the underlying Win32 APIs do not support it. For the first release, joining will have to be accepted from Microsoft NetMeeting.

Up Arrow Back to IConferenceX Interface

Up Arrow Back to Conference Object

Up Arrow Back to ActiveX Listing

IConferenceX::RejectJoin

HRESULT RejectJoin(
    IConfUserX *pUser,
    BOOLEAN *pfSucceeded);

Rejects a request from a user to join a conference.

  • Returns S_OK if the requested number of elements was returned, or E_UNEXPECTED if an unknown error occurred.
pUser
Instance of the User object.
pfSucceeded
TRUE if the user is not added to the conference, or FALSE otherwise.

This method will not be implemented for the first release because the underlying Win32 APIs do not support it. For the first release, joining will have to be rejected from Microsoft NetMeeting.

Up Arrow Back to IConferenceX Interface

Up Arrow Back to Conference Object

Up Arrow Back to ActiveX Listing

IConferenceX::CreateChannel

HRESULT CreateChannel(
    BSTR bstrID,
    IConfChannelX **ppChannel);

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

  • Returns one of the following values:
    S_OK | Success. The requested number of elements was returned.
    E_OUTOFMEMORY | Memory could not be allocated to service the request.
    E_UNEXPECTED | An unknown error occurred.
bstrID
Interface ID of the specific-type channel (textual representation of a GUID).
ppChannel
Address to receive an instance of a new Channel object.

This method is not supported in the current version.

Up Arrow Back to IConferenceX Interface

Up Arrow Back to Conference Object

Up Arrow Back to ActiveX Listing

IConferenceX::Leave

HRESULT Leave(
    BOOLEAN *pfSucceeded);

Removes the local computer from the active conference.

  • Returns S_OK if the requested number of elements was returned, or S_FALSE if an unknown error occurred.
pfSucceeded
Request to leave the conference was accepted.

Up Arrow Back to IConferenceX Interface

Up Arrow Back to Conference Object

Up Arrow Back to ActiveX Listing

IConferenceX::IsSameAs

HRESULT IsSameAs(
    IConferenceX *pConference,
    BOOLEAN *pfSame);

Identifies whether the two Conference objects represent the same conference.

  • Returns S_OK if both Conference objects represent the same conference, or S_FALSE if not.
pConference
Instance of the Conference object to compare with.
pfSame
TRUE if it is the same conference, or FALSE otherwise.

Up Arrow Back to IConferenceX Interface

Up Arrow Back to Conference Object

Up Arrow Back to ActiveX Listing

IConferenceX::Advise

HRESULT Advise(void);

Enables advisements (events) for the IConferenceX interface.

  • Returns S_OK if both Conference objects represent the same conference, or E_UNEXPECTED if an unknown error occurred.

Up Arrow Back to IConferenceX Interface

Up Arrow Back to Conference Object

Up Arrow Back to ActiveX Listing

IConferenceX::Unadvise

HRESULT Unadvise(void);

Disables advisements (events) for the IConferenceX interface.

  • Returns S_OK if the requested number of elements was returned, or E_UNEXPECTED if an unknown error occurred.

Up Arrow Back to IConferenceX Interface

Up Arrow Back to Conference Object

Up Arrow Back to ActiveX Listing


Member Object

The Member object is derived from the user:

  • IConfMemberX

Up Arrow Back to ActiveX Reference

IConfMemberX

This interface provides the following properties:

  • Name
  • Type
  • ConferenceCapabilities
  • IsMCU
  • Conferences
  • Applications
  • Conference
  • IsSelf

and the following method:

  • IsSameAs

IConfMemberX Properties

This section describes the properties for the IConfMemberX interface.

IConfMemberX::Name

HRESULT Name(
    BSTR *pbstrName);

Indicates a user name string.

  • Returns one of the following values:
    S_OK | Success. The requested number of elements was returned.
    E_OUTOFMEMORY | Memory could not be allocated to service the request.
    E_UNEXPECTED | An unknown error occurred.
pbstrName
Address to receive a string for the user name or address.

Up Arrow Back to IConfMemberX Interface

Up Arrow Back to Member Object

Up Arrow Back to ActiveX Listing

IConfMemberX::Type

HRESULT Type(
    LONG *plType);

Indicates the type of name for the User object.

  • Returns S_OK if the requested number of elements was returned, or E_UNEXPECTED if an unknown error occurred.
plType
Address of the type of name of the user.

Up Arrow Back to IConfMemberX Interface

Up Arrow Back to Member Object

Up Arrow Back to ActiveX Listing

IConfMemberX::ConferenceCapabilities

HRESULT ConferenceCapabilities(
    LONG *plConfCaps);

Indicates which types of conferences (audio, data, or video) are available on the user's computer.

  • Returns S_OK if the requested number of elements was returned, or E_UNEXPECTED if an unknown error occurred.
plConfCaps
Address of a buffer that upon return will contain the capabilities of the computer.

This property is not supported in the current version.

Up Arrow Back to IConfMemberX Interface

Up Arrow Back to Member Object

Up Arrow Back to ActiveX Listing

IConfMemberX::IsMCU

HRESULT IsMCU(
    BOOLEAN *pfMCU);

Indicates whether the user is a multipoint control unit (MCU).

  • Returns S_OK if the user is an MCU, or S_FALSE if not.
pfMCU
TRUE if the user is an MCU, or FALSE otherwise.

This property is not supported in the current version.

Up Arrow Back to IConfMemberX Interface

Up Arrow Back to Member Object

Up Arrow Back to ActiveX Listing

IConfMemberX::Conferences

HRESULT Conferences(
    IConferences **ppConferences);

Indicates a collection of Conference objects that a user is participating in.

  • Returns one of the following values:
    S_OK | Success. The requested number of elements was returned.
    E_OUTOFMEMORY | Memory could not be allocated to service the request.
    E_UNEXPECTED | An unknown error occurred.
ppConferences
Address of a collection of conference objects.

This property is not supported in the current version.

Up Arrow Back to IConfMemberX Interface

Up Arrow Back to Member Object

Up Arrow Back to ActiveX Listing

IConfMemberX::Applications

HRESULT Applications(
    IConfApplications **ppApplications);

Indicates a collection of Client Application objects for a user.

  • Returns one of the following values:
    S_OK | Success. The requested number of elements was returned.
    E_OUTOFMEMORY | Memory could not be allocated to service the request.
    E_UNEXPECTED | An unknown error occurred.
ppApplications
Address of a collection of Client Application objects.

This property is not supported in the current version.

Up Arrow Back to IConfMemberX Interface

Up Arrow Back to Member Object

Up Arrow Back to ActiveX Listing

IConfMemberX::Conference

HRESULT Conference(
    IConferenceX **ppConference);

Indicates an instance of the Conference object to which the member belongs.

  • Returns S_OK if the requested number of elements was returned, or E_UNEXPECTED if an unknown error occurred.
ppConference
Address of a buffer to receive the instance of the conference object.

Up Arrow Back to IConfMemberX Interface

Up Arrow Back to Member Object

Up Arrow Back to ActiveX Listing

IConfMemberX::IsSelf

HRESULT IsSelf(
    BOOLEAN *pfSelf);

Identifies whether the Member object represents the local computer.

  • Returns S_OK if the Member object represents the local computer, or S_FALSE if not.
pfSelf
TRUE if self, or FALSE otherwise.

Up Arrow Back to IConfMemberX Interface

Up Arrow Back to Member Object

Up Arrow Back to ActiveX Listing

IConfMemberX Methods

This section describes the method for the IConfMemberX interface.

IConfMemberX::IsSameAs

HRESULT IsSameAs(
    IConfMemberX *pConfMember,
    BOOLEAN *pfSame);

Indicates whether two Member objects represent the same member.

  • Returns S_OK if both Conference objects represent the same conference, or S_FALSE if not.
pConfMember
Instance of the Member object to compare with.
pfSame
TRUE if it is the same member, or FALSE otherwise.

Up Arrow Back to IConfMemberX Interface

Up Arrow Back to Member Object

Up Arrow Back to ActiveX Listing


Channel Object

The Channel object provides the following interfaces:

  • IConfChannelX
  • IConfDataExchangeX
  • IConfFileExchangeX
  • IConfAppSharingX
  • IConfAppControlX

Up Arrow Back to ActiveX Reference

IConfChannelX

This interface provides the following properties:

  • Conference
  • Interface
  • Members
  • Object

and the following methods:

  • IncludeMember
  • ExcludeMember
  • IsSameAs

IConfChannelX Properties

This section describes the properties for the IConfChannelX interface.

IConfChannelX::Conference

HRESULT Conference(
    IConferenceX **ppConference);

Indicates the Conference object to which the channel belongs.

  • Returns S_OK if the requested number of elements was returned, or E_UNEXPECTED if an unknown error occurred.
ppConference
Address of a collection of instances of the Conference object.

Up Arrow Back to IConfChannelX Interface

Up Arrow Back to Channel Object

Up Arrow Back to ActiveX Listing

IConfChannelX::Interface

HRESULT Interface(
    BSTR *pbstrID);

Indicates a Channel-specific interface identifier.

  • Returns S_OK if the requested number of elements was returned, or E_UNEXPECTED if an unknown error occurred.
pbstrID
Address of an interface's unique identifier.

Up Arrow Back to IConfChannelX Interface

Up Arrow Back to Channel Object

Up Arrow Back to ActiveX Listing

IConfChannelX::Members

HRESULT Members(
    IConfMembers **ppMembers);

Indicates a collection of Member objects that are currently enabled to use the channel.

  • Returns one of the following values:
    S_OK | Success. The requested number of elements was returned.
    E_OUTOFMEMORY | Memory could not be allocated to service the request.
    E_UNEXPECTED | An unknown error occurred.
ppMembers
Address to receive the Member object enumerator.

This property is not supported in the current version.

Up Arrow Back to IConfChannelX Interface

Up Arrow Back to Channel Object

Up Arrow Back to ActiveX Listing

IConfChannelX::Object

HRESULT Object(
    IDispatch **ppObject);

Retrieves either a data exchange object, a file exchange object, an app control object, or an app sharing object, depending on the channel type.

  • Returns one of the following values:
    S_OK | Success. The requested number of elements was returned.
    E_OUTOFMEMORY | Memory could not be allocated to service the request.
    E_UNEXPECTED | An unknown error occurred.
ppObject
Address to receive the data exchange, file exchange, app control, or app sharing object.

Up Arrow Back to IConfChannelX Interface

Up Arrow Back to Channel Object

Up Arrow Back to ActiveX Listing

IConfChannelX Methods

This section describes the methods for the IConfChannelX interface.

IConfChannelX::IncludeMember

HRESULT IncludeMember(
    IConfMemberX *pMember,
    BOOLEAN *pfSucceeded);

Enables a Member object to use the channel.

  • Returns S_OK if the requested number of elements was returned, or E_UNEXPECTED if an unknown error occurred.
pMember
Instance of the Member object to be given use of the channel.
pfSucceeded
TRUE if the request to use the channel is accepted, or FALSE otherwise.

This method is not supported in the current version.

Up Arrow Back to IConfChannelX Interface

Up Arrow Back to Channel Object

Up Arrow Back to ActiveX Listing

IConfChannelX::ExcludeMember

HRESULT ExcludeMember(
    IConfMemberX *pMember,
    BOOLEAN *pfSucceeded);

Prevents a Member object from using the channel.

  • Returns S_OK if the requested number of elements was returned, or E_UNEXPECTED if an unknown error occurred.
pMember
Instance of the Member object to be prevented from using the channel.
pfSucceeded
TRUE if the request to exclude a member is accepted, or FALSE otherwise.

This method is not supported in the current version.

Up Arrow Back to IConfChannelX Interface

Up Arrow Back to Channel Object

Up Arrow Back to ActiveX Listing

IConfChannelX::IsSameAs

HRESULT IsSameAs(
    IConfChannelX *pConfChannel,
    BOOLEAN *pfSame);

Indicates whether the two Channel objects represent the same channel.

  • Returns S_OK if both Channel objects represent the same channel, or S_FALSE if not.
pConfChannel
Instance of the Channel object to compare with.
pfSame
TRUE if it is the same channel, or FALSE otherwise.

Up Arrow Back to IConfChannelX Interface

Up Arrow Back to Channel Object

Up Arrow Back to ActiveX Listing

IConfDataExchangeX

This interface provides the following methods:

  • SendData
  • Advise
  • Unadvise

IConfDataExchangeX Methods

This section describes the methods for the IConfDataExchangeX interface.

IConfDataExchangeX::SendData

HRESULT SendData(
    IConfMemberX *pMember,
    IConfApplicationX *pApplication,
    VARIANT data,
    LONG lOptions,
    BOOLEAN *pfSucceeded);

Sends a block of data bytes through the channel to a specified application on the specified member's computer. The buffer can be freed any time after calling this method.

  • Returns one of the following values:
    S_OK | Success. The requested number of elements was returned.
    E_OUTOFMEMORY | Memory could not be allocated to service the request.
    E_UNEXPECTED | An unknown error occurred.
pMember
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
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.
data
Data to be sent. Can be either a string or an array of bytes, integers, and so on.
lOptions
Flags for data transfer options. Can be the following value:
CNFF_SDOPT_NONE No option is specified.
pfSucceeded
TRUE if the data transfer succeeded, or FALSE otherwise.

Up Arrow Back to IConfDataExchangeX Interface

Up Arrow Back to Channel Object

Up Arrow Back to ActiveX Listing

IConfDataExchangeX::Advise

HRESULT Advise(void);

Enables advisements (events) for this object.

  • Returns S_OK if the requested number of elements was returned, or E_UNEXPECTED if an unknown error occurred.

Up Arrow Back to IConfDataExchangeX Interface

Up Arrow Back to Channel Object

Up Arrow Back to ActiveX Listing

IConfDataExchangeX::Unadvise

HRESULT Unadvise(void);

Disables advisements (events) generated by the object.

  • Returns S_OK if the requested number of elements was returned, or E_UNEXPECTED if an unknown error occurred.

Up Arrow Back to IConfDataExchangeX Interface

Up Arrow Back to Channel Object

Up Arrow Back to ActiveX Listing

IConfFileExchangeX

This interface provides the following properties:

  • GetReceiveFileDir
  • SetReceiveFileDir

and the following methods:

  • SendFile
  • Cancel
  • Advise
  • Unadvise

IConfFileExchangeX Property

This section describes the property for the IConfFileExchangeX interface.

IConfFileExchangeX::GetReceiveFileDir

HRESULT GetReceiveFileDir(
    BSTR *pbstrDir);

Gets the path of the directory where received files will be stored.

  • Returns S_OK if the requested number of elements was returned, or E_UNEXPECTED if an unknown error occurred.
pbstrDir
Address to receive a string for the path of the directory where received files will be stored.

Up Arrow Back to IConfFileExchangeX Interface

Up Arrow Back to Channel Object

Up Arrow Back to ActiveX Listing

IConfFileExchangeX::SetReceiveFileDir

HRESULT SetReceiveFileDir(
    BSTR strDir);

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

  • Returns S_OK if the requested number of elements was returned, or E_UNEXPECTED if an unknown error occurred.
strDir
String for the path of the directory where a received file will be stored.

Up Arrow Back to IConfFileExchangeX Interface

Up Arrow Back to Channel Object

Up Arrow Back to ActiveX Listing

IConfFileExchangeX Methods

This section describes the methods for the IConfFileExchangeX interface.

IConfFileExchangeX::SendFile

HRESULT SendFile(
    IConfMemberX *pMember,
    IConfApplicationX *pApplication,
    BSTR bstrFile,
    LONG lOptions,
    IConfFileTransferX **ppFileTransfer);

Sends a file through the channel.

  • Returns S_OK if the requested number of elements was returned, or E_UNEXPECTED if an unknown error occurred.
pMember
Member object that will receive the file. If the parameter is NULL, the file is sent to all members in the channel.
pApplication
Application object that will receive the transfer progress notification. If the parameter is NULL, the notification is sent to the remote instance of the calling application.
bstrFile
Full path of the file to be sent.
lOptions
Flags for file transfer options. Can be one of the following values:
CNFF_SFOPT_NOCOMPRESS | The file should not be compressed.
CNFF_SFOPT_NONE | No option is specified.
CNFF_SFOPT_NOUI | The default progress dialog user interface should not be used.
ppFileTransfer
Address of a buffer to receive a File Transfer Channel.

Up Arrow Back to IConfFileExchangeX Interface

Up Arrow Back to Channel Object

Up Arrow Back to ActiveX Listing

IConfFileExchangeX::Cancel

HRESULT Cancel(
    IConfFileTransferX *pFileTransfer,
    BOOLEAN *pfSucceeded);

Cancels the file being sent or received.

  • Returns S_OK if the requested number of elements was returned, or E_UNEXPECTED if an unknown error occurred.
pFileTransfer
Instance of a File Transfer Channel being sent or received.
pfSucceeded
TRUE if the send is canceled, or FALSE otherwise.

Up Arrow Back to IConfFileExchangeX Interface

Up Arrow Back to Channel Object

Up Arrow Back to ActiveX Listing

IConfFileExchangeX::Advise

HRESULT Advise(void);

Enables advisements (events) for this interface.

  • Returns S_OK if the requested number of elements was returned, or E_UNEXPECTED if an unknown error occurred.

Up Arrow Back to IConfFileExchangeX Interface

Up Arrow Back to Channel Object

Up Arrow Back to ActiveX Listing

IConfFileExchangeX::Unadvise

HRESULT Unadvise(void);

Disables advisements (events) for this interface.

  • Returns S_OK if the requested number of elements was returned, or E_UNEXPECTED if an unknown error occurred.

Up Arrow Back to IConfFileExchangeX Interface

Up Arrow Back to Channel Object

Up Arrow Back to ActiveX Listing

IConfAppSharingX

This interface provides the following property:

  • SharableApps

and the following methods:

  • Advise
  • Unadvise

IConfAppSharingX Property

This section describes the property for the IConfAppSharingX interface.

IConfAppSharingX::SharableApps

HRESULT SharableApps(
    IConfShareApps **ppSharableApps);

Retrieves a pointer to a collection of the Sharable Applications objects for the applications that can be shared.

  • Returns one of the following values:
    S_OK | Success. The requested number of elements was returned.
    E_OUTOFMEMORY | Memory could not be allocated to service the request.
    E_UNEXPECTED | An unknown error occurred.
ppSharableApps
Address of a collection of sharable applications.

Up Arrow Back to IConfAppSharingX Interface

Up Arrow Back to Channel Object

Up Arrow Back to ActiveX Listing

IConfAppSharingX Methods

This section describes the methods for the IConfAppSharingX interface.

IConfAppSharingX::Advise

HRESULT Advise(void);

Enables advisements (events) for this interface.

  • Returns S_OK if the requested number of elements was returned, or E_UNEXPECTED if an unknown error occurred.

Up Arrow Back to IConfAppSharingX Interface

Up Arrow Back to Channel Object

Up Arrow Back to ActiveX Listing

IConfAppSharingX::Unadvise

HRESULT Unadvise(void);

Disables advisements (events) for this interface.

  • Returns S_OK if the requested number of elements was returned, or E_UNEXPECTED if an unknown error occurred.

Up Arrow Back to IConfAppSharingX Interface

Up Arrow Back to Channel Object

Up Arrow Back to ActiveX Listing

IConfAppControlX

This interface provides the following methods:

  • StartRemoteInstance
  • Advise
  • Unadvise

IConfAppControlX Methods

This section describes the methods for the IConfAppControlX interface.

IConfAppControlX::StartRemoteInstance

HRESULT StartRemoteInstance(
    IConfMemberX *pMember,
    IConfApplicationX *pApplication,
    BOOLEAN *pfSucceeded);

Accepts an Application object and starts an instance of the application on the specified member's computer.

  • Returns one of the following values:
    S_OK | Success. The requested number of elements was returned.
    E_OUTOFMEMORY | Memory could not be allocated to service the request.
    E_UNEXPECTED | An unknown error occurred.
pMember
Member object where the remote instance of the application will be started. If the parameter is NULL, the application will be started on all members in the channel.
pApplication
Application object whose remote instance will be started. If the parameter is NULL, the method starts the remote instance of the calling application.
pfSucceeded
TRUE if the application was started, or FALSE otherwise.

Up Arrow Back to IConfAppControlX Interface

Up Arrow Back to Channel Object

Up Arrow Back to ActiveX Listing

IConfAppControlX::Advise

HRESULT Advise(void);

Enables advisements (events) for this interface.

  • Returns S_OK if the requested number of elements was returned, or E_UNEXPECTED if an unknown error occurred.

Up Arrow Back to IConfAppControlX Interface

Up Arrow Back to Channel Object

Up Arrow Back to ActiveX Listing

IConfAppControlX::Unadvise

HRESULT Unadvise(void);

Disables advisements (events) for this interface.

  • Returns S_OK if the requested number of elements was returned, or E_UNEXPECTED if an unknown error occurred.

Up Arrow Back to IConfAppControlX Interface

Up Arrow Back to Channel Object

Up Arrow Back to ActiveX Listing


Client Application Object

The Client Application object provides the following interface:

  • IConfApplicationX

Up Arrow Back to ActiveX Reference

IConfApplicationX

This interface provides the following properties:

  • GUID
  • Name

Up Arrow Back to Client Application Object

IConfApplicationX Properties

This section describes the properties for the IConfApplicationX interface.

IConfApplicationX::GUID

HRESULT GUID(
    BSTR *pbstrID);

Indicates a string form of an application's globally unique identifier (GUID).

  • Returns S_OK if the requested number of elements was returned, or E_UNEXPECTED if an unknown error occurred.
pbstrID
Address of a string containing the application's unique identifier.

Up Arrow Back to IConfApplicationX Interface

Up Arrow Back to Client Application Object

Up Arrow Back to ActiveX Listing

IConfApplicationX::Name

HRESULT Name(
    BSTR *pbstrName);

Indicates an application name string.

  • Returns S_OK if the requested number of elements was returned, or E_UNEXPECTED if an unknown error occurred.
pbstrName
Address to receive a string for the application name.

Up Arrow Back to IConfApplicationX Interface

Up Arrow Back to Client Application Object

Up Arrow Back to ActiveX Listing


Sharable Application Object

The Sharable Application object provides the following interface:

  • IConfShareAppX

Up Arrow Back to ActiveX Reference

IConfShareAppX

This interface provides the following properties:

  • Name
  • ShareState

and the following methods:

  • Share
  • Unshare

Up Arrow Back to Sharable Application Object

IConfShareAppX Properties

This section describes the properties for the IConfShareAppX interface.

IConfShareAppX::Name

HRESULT Name(
    BSTR *pbstrName);

Indicates a string for the sharable application name.

  • Returns S_OK if the requested number of elements was returned, or E_UNEXPECTED if an unknown error occurred.
pbstrName
Address to receive a string for the share application name.

Up Arrow Back to IConfShareAppX Interface

Up Arrow Back to Sharable Application Object

Up Arrow Back to ActiveX Listing

IConfShareAppX::ShareState

HRESULT ShareState(
    LONG *puShrState);

Retrieves the "share" state of the application.

  • Returns S_OK if the requested number of elements was returned, or E_UNEXPECTED if an unknown error occurred.
puShrState
Address of the current "share" state of the application. Can be one of the following values:
CNF_SHR_SHARED | The application is being shared.
CNF_SHR_UNKNOWN | The application state is unknown.
CNF_SHR_UNSHARED | The application is not being shared.

Up Arrow Back to IConfShareAppX Interface

Up Arrow Back to Sharable Application Object

Up Arrow Back to ActiveX Listing

IConfShareAppX Methods

This section describes the methods for the interface.

IConfShareAppX::Share

HRESULT Share(
    BOOLEAN *pfSucceeded);

Shares the application on all the members in the channel.

  • Returns S_OK if the requested number of elements was returned, or E_UNEXPECTED if an unknown error occurred.
pfSucceeded
TRUE if the application is shared, or FALSE otherwise.

Up Arrow Back to IConfShareAppX Interface

Up Arrow Back to Sharable Application Object

Up Arrow Back to ActiveX Listing

IConfShareAppX::Unshare

HRESULT Unshare(
    BOOLEAN *pfSucceeded);

Unshares the application on all the members in the channel.

  • Returns S_OK if the requested number of elements was returned, or E_UNEXPECTED if an unknown error occurred.
pfSucceeded
TRUE if the application is unshared, or FALSE otherwise.

Up Arrow Back to IConfShareAppX Interface

Up Arrow Back to Sharable Application Object

Up Arrow Back to ActiveX Listing


Data Transfer Channel

The Data Transfer Channel provides the following interface:

  • IConfDataTransferX

Up Arrow Back to ActiveX Reference

IConfDataTransferX

This interface provides the following properties:

  • BytesTransferred
  • String
  • Array

Up Arrow Back to Data Transfer Channel

IConfDataTransferX Properties

This section describes the properties for the IConfDataTransferX interface.

IConfDataTransferX::BytesTransferred

HRESULT BytesTransferred(
    LONG *plBytes);

Indicates the number of bytes transferred.

  • Returns S_OK if the requested number of elements was returned, or E_UNEXPECTED if an unknown error occurred.
plBytes
Address of the number of bytes transferred.

Up Arrow Back to IConfDataTransferX Interface

Up Arrow Back to Data Transfer Channel

Up Arrow Back to ActiveX Listing

IConfDataTransferX::String

HRESULT String(
    BSTR *pbstrData);

Retrieves the data to be transferred as a string.

  • Returns S_OK if the requested number of elements was returned, or E_UNEXPECTED if an unknown error occurred.
pbstrData
Address of the string of data to be transferred.

Up Arrow Back to IConfDataTransferX Interface

Up Arrow Back to Data Transfer Channel

Up Arrow Back to ActiveX Listing

IConfDataTransferX::Array

HRESULT Array(
    LONG cbElements
    SAFEARRAY (unsigned char) *array);

Retrieves an array (SAFEARRAY) of the data to be transferred.

  • Returns S_OK if the requested number of elements was returned, or E_UNEXPECTED if an unknown error occurred.
cbElements
Width, in bytes, of each element (for example, 1 is a Byte, 2 is an Integer, 4 is a Long).
array
Address of the string of data to be transferred.

Up Arrow Back to IConfDataTransferX Interface

Up Arrow Back to Data Transfer Channel

Up Arrow Back to ActiveX Listing


File Transfer Channel

The File Transfer Channel provides the following interface:

  • IConfFileTransferX

Up Arrow Back to ActiveX Reference

IConfFileTransferX

This interface provides the following properties:

  • Name
  • BytesTransferred
  • TotalSize
  • State

and the following method:

  • IsSameAs

Up Arrow Back to File Transfer Channel

IConfFileTransferX Properties

This section describes the properties for the IConfFileTransferX interface.

IConfFileTransferX::Name

HRESULT Name(
    BSTR *pbstrName);

Indicates a string for the full path of the file.

  • Returns S_OK if the requested number of elements was returned, or E_UNEXPECTED if an unknown error occurred.
pbstrName
Address to receive a string for the full path of the file.

Up Arrow Back to IConfFileTransferX Interface

Up Arrow Back to File Transfer Channel

Up Arrow Back to ActiveX Listing

IConfFileTransferX::BytesTransferred

HRESULT BytesTransferred(
    LONG *plBytes);

Indicates the number of bytes transferred.

  • Returns S_OK if the requested number of elements was returned, or E_UNEXPECTED if an unknown error occurred.
plBytes
Address of a collection of the number of bytes transferred.

Up Arrow Back to IConfFileTransferX Interface

Up Arrow Back to File Transfer Channel

Up Arrow Back to ActiveX Listing

IConfFileTransferX::TotalSize

HRESULT TotalSize(
    LONG *plBytes);

Indicates the size, in bytes, of the file.

  • Returns S_OK if the requested number of elements was returned, or E_UNEXPECTED if an unknown error occurred.
plBytes
Address of a collection of the size, in bytes, of the file.

Up Arrow Back to IConfFileTransferX Interface

Up Arrow Back to File Transfer Channel

Up Arrow Back to ActiveX Listing

IConfFileTransferX::State

HRESULT State(
    LONG *plState);

Indicates the state of the File Transfer Channel.

  • Returns S_OK if the requested number of elements was returned, or E_UNEXPECTED if an unknown error occurred.
plState
Address of a collection of the state of the file. Can be one of the following values:
CNF_FILE_COMPLETE | The file-transfer operation is completed.
CNF_FILE_IDLE | The file-transfer operation was requested but not yet initialized.
CNF_FILE_INITIALIZING | The file-transfer operation was requested but now initialized.
CNF_FILE_PROGRESS | The file-transfer operation is in progress.

Note that the CNF_FILE_COMPLETE value can represent three reasons for file-transfer operation completion: success, cancellation, or failure.

Up Arrow Back to IConfFileTransferX Interface

Up Arrow Back to File Transfer Channel

Up Arrow Back to ActiveX Listing

IConfFileTransferX Methods

This section describes the method for the IConfFileTransferX interface.

IConfFileTransferX::IsSameAs

HRESULT IsSameAs(
    IConfFileTransfer *pFileTransfer,
    BOOLEAN *pfSame);

Indicates whether the two File Transfer Channels represent the same file-transfer operation.

  • Returns S_OK if both File Transfer Channels represent the same operation, or S_FALSE if not.
pFileTransfer
Instance of the File Transfer Channel to compare with.
pfSame
TRUE if it is the same file transfer, or FALSE otherwise.

Up Arrow Back to IConfFileTransferX Interface

Up Arrow Back to File Transfer Channel

Up Arrow Back to ActiveX Listing


Installable Codecs Reference

Microsoft® NetMeeting™ 2.1 supports adding arbitrary audio and video codec formats for use with NetMeeting. NetMeeting 2.1 also supports enumerating, prioritizing, or removing these codec formats.

Codecs define the format of audio and video information and represent how audio and video are compressed and transmitted over the network. In order to correctly interpret this audio and video information between terminals, the same codec is required at both locations.

Developers can use this reference to learn how to install their own codecs for use in NetMeeting applications.

This reference provides information on the ITU Standard Codecs, RTP Payload Handlers, and third party codecs as they relate to NetMeeting. The NetMeeting interfaces and structures provided by the SDK are required to add audio and video codecs to an application.

ITU Standard Codecs and RTP Payload Handlers

Third-Party Codecs

Implementation Notes

Interfaces Reference

Structures Reference

Up Arrow Back to References


ITU Standard Codecs and RTP Payload Handlers

Microsoft® NetMeeting™ 2.1 ships with four ITU (International Telecommunications Union) standard codecs: G.711, G.723, H.261, and H.263. For streaming audio and video, there is a tight coupling between a codec and its RTP payload handler. RTP is the network transport protocol that NetMeeting uses for audio and video streams. An RTP payload handler organizes audio streams into packets for use by the RTP. RTP is not yet a part of the Microsoft Windows® operating system. Windows has a general-purpose means for installing and using codecs, namely ACM and VCM (VCM is also known as ICM). But Windows has no general-purpose means for installing RTP payload handlers.

NetMeeting supports the H.323 standard, which calls for the use of RTP and the four standard codecs mentioned above. To get optimal performance and a quality end-user experience, NetMeeting 2.1 has gone beyond the limitations of the interfaces defined in ACM and VCM by linking the NetMeeting implementations of the standard codecs with specific RTP payload handlers built to use these implementations with the RTP and call control components in NetMeeting.


Third-Party Codecs

Many third parties have expressed strong interest in being able to integrate their own codecs into NetMeeting. The long-term goal is to fully enable this. But in NetMeeting 2.1, support is limited. A third party is able to install a standard ACM or VCM codec through the Installable Codecs API for use with NetMeeting. (The codec must be capable of real-time encoding and decoding.) But NetMeeting currently has no means for installing an RTP payload handler to associate with the installed codec. Therefore, a generic RTP payload handler is used for third-party installed codecs.

In most cases, performance on the wire using third-party installed codecs is quite acceptable. But in some cases, performance on the wire will be limited. Performance of custom audio codecs over RTP will likely be indistinguishable from the performance of NetMeeting's own codecs under a variety of traffic conditions. But performance of custom video codecs over RTP will likely vary, and will likely be especially poor on low-bandwidth connections.

Furthermore, the third-party installed codecs will be assigned code points that make them nonstandard capabilities in H.245. (H.245, the call control component in NetMeeting, is the mechanism in the H.323 standard that is used to negotiate capabilities when creating a connection. Code points are specific values assigned to codecs for use in capability negotiation.) The result is that while a third party will be able to install its codecs for use in NetMeeting 2.1, the third party will not be able to effectively replace a NetMeeting standard codec with its own. This means that the third-party's implementation of a standard codec will not be selected when H.245 negotiates to use that standard codec.

For example, a third-party implementation of the G.723 codec (say, a hardware implementation) can be installed for use with NetMeeting. But the G.723 hardware codec will be selected only in certain circumstances. A third party can install its codec on two different computers that have NetMeeting installed and can rank the codec's priority at the top. On a call between these two NetMeeting computers, the G.723 hardware codec is selected. However, if one of these two computers calls a third computer that doesn't have the third-party's G.723 hardware codec installed with NetMeeting (or calls a third computer that is an H.323-compliant terminal but isn't NetMeeting), and the "G.723" code point is negotiated as the codec to use, the Microsoft G.723 software codec will be used in NetMeeting. In other words, the third-party G.723 hardware codec will not have replaced Microsoft's G.723 software codec.


Implementation Notes

To add an audio or video format for use with NetMeeting, first obtain the appropriate interface by calling the COM CoCreateInstance function, providing the desired interface (IInstallAudioCodecs or IInstallVideoCodecs). Then call the add method (AddACMFormat or AddVCMFormat) on this interface to add a format, or call the remove method (RemoveACMFormat or RemoveVCMFormat) to remove a format. Use the IInstallVideoCodecs::EnumFormats (or IInstallAudioCodecs::EnumFormats) method to enumerate the list of formats known to NetMeeting, or IInstallVideoCodecs::ReorderFormats (or IInstallAudioCodecs::ReorderFormats) to make NetMeeting use these formats in a different priority order (see the comment in the IInstallAudioCodecs::ReorderFormats or the IInstallVideoCodecs::ReorderFormats description).

When a vendor uses the Installable Codecs API to add a codec format for use with NetMeeting, the information about this format is stored in the registry. Whenever NetMeeting is upgraded, the NetMeeting setup removes all registry entries associated with the previous version of NetMeeting, including information about additional audio or video codec formats. This registry clearing is required to avoid incompatibility problems between different versions of NetMeeting. As a result, a user will have to reinstall any custom audio or video codec format after upgrading NetMeeting.


Interfaces Reference

This section defines the interfaces needed to add audio and video codec formats for use with NetMeeting.

Create_Instance
IInstallAudioCodecs
IInstallVideoCodecs

Create Instance

Use the standard COM CreateInstance API to instantiate a CInstallCodecs object with the CreateInstallCodecs interface. For more information on Create Instance, see Inside OLE, Second Edition.

CreateInstallCodecs

HRESULT CreateInstallCodecs(
    LPUNKNOWN punkOuter,
    REFIID riid,
    LPVOID * ppv);

Creates an instance of the CInstallCodecs object, and returns the requested interface. This function should only be called indirectly through CoCreateInstance.

  • Returns one of the following values:
    S_OK | Success.
    E_INVALIDARG | Invalid argument.
    E_OUTOFMEMORY | Not enough memory to create the object.
    CLASS_E_NOAGGREGATION | Aggregation is not supported for this object.
    IC_E_CAPS_INSTANTIATION_FAILURE | Could not instantiate a capability object.
    IC_E_CAPS_INITIALIZATION_FAILURE | Could not initialize a capability object.
punkOuter
Pointer to an indicator that reveals whether or not the object is part of an aggregate.
riid
Reference to the identifier of the interface.
ppv
Indirect pointer to the requested interface.

CreateInstallCodecs should not be called directly. Clients of installable codecs should use the COM CoCreateInstance function to instantiate the object, expecting the same return values.

Up Arrow Back to Interfaces Reference

IInstallAudioCodecs

This interface provides methods for adding audio codec formats for use with NetMeeting, as well as removing these formats, enumerating them, and changing their use order.
AddACMFormat
EnumFormats
FreeBuffer
RemoveACMFormat
ReorderFormats

Up Arrow Back to Interfaces Reference

IInstallAudioCodecs::AddACMFormat

HRESULT AddACMFormat(
    LPWAVEFORMATEX lpwfx,
    PAUDCAP_INFO pAudCapInfo);

Adds an ACM encoding format for use with NetMeeting.

  • Returns one of the following values:
    S_OK | Success.
    E_INVALIDARG | Invalid argument.
    IC_E_NO_SUCH_FORMAT | The specified WAVEFORMATEX structure was not found with ACM. The format must be installed with ACM before it can be added for use with NetMeeting.
    IC_E_INTERNAL_ERROR | The network audio/video controller reported a system error.
lpwfx
Address of the WAVEFORMATEX structure of the format to add.
pAudCapInfo
Additional format information that is not in the WAVEFORMATEX structure.

Up Arrow Back to IInstallAudioCodecs Interface

Up Arrow Back to Interfaces Reference

IInstallAudioCodecs::EnumFormats

HRESULT EnumFormats(
    PAUDCAP_INFO_LIST * ppAudCapInfoList);

Enumerates the audio codec formats known to NetMeeting.

  • Returns one of the following values:
    S_OK | Success.
    E_INVALIDARG | Invalid argument.
    E_OUTOFMEMORY | Not enough memory for allocating the enumeration buffer.
    IC_E_NO_FORMATS | No formats were available to enumerate.
    IC_E_INTERNAL_ERROR | The network audio/video controller reported a system error.
ppAudCapInfoList
Address of a pointer to an AUDCAP_INFO_LIST structure that lists the enumerated formats.

The caller is expected to free the returned list by calling IInstallAudioCodecs::FreeBuffer on the same interface.

Up Arrow Back to IInstallAudioCodecs Interface

Up Arrow Back to Interfaces Reference

IInstallAudioCodecs::FreeBuffer

HRESULT FreeBuffer(
    LPVOID lpBuffer);

Frees a buffer that was returned by the IInstallAudioCodecs interface.

  • Returns S_OK if the function was successful.
lpBuffer
Address of the buffer to free. This buffer must have been allocated by one of the IInstallAudioCodecs methods.

Up Arrow Back to IInstallAudioCodecs Interface

Up Arrow Back to Interfaces Reference

IInstallAudioCodecs::RemoveACMFormat

HRESULT RemoveACMFormat(
    LPWAVEFORMATEX lpwfx);

Removes an ACM format from the list of formats used by NetMeeting.

  • Returns one of the following values:
    S_OK | Success.
    E_INVALIDARG | Invalid argument.
    IC_E_NO_SUCH_FORMAT | The specified format was not found.
    IC_E_INTERNAL_ERROR | The network audio/video controller reported a system error.
lpwfx
Address of the WAVEFORMATEX structure for the format to remove.

Up Arrow Back to IInstallAudioCodecs Interface

Up Arrow Back to Interfaces Reference

IInstallAudioCodecs::ReorderFormats

HRESULT ReorderFormats(
    PAUDCAP_INFO_LIST pAudCapInfoList);

Reorders the audio formats for use with NetMeeting.

  • Returns one of the following values:
    S_OK | Success.
    E_INVALIDARG | Invalid argument.
    C_E_INTERNAL_ERROR | The network audio/video controller reported a system error.
pAudCapInfoList
Address of the AUDCAP_INFO_LIST structure containing a pointer to the list of formats to reorder and the number of formats in the list.

Since this method can only reorder formats that are known to NetMeeting, it is recommended that the caller first call IInstallAudioCodecs::EnumFormats to get all formats known to NetMeeting, assign new sort indexes (wSortIndex), and then call IInstallAudioCodecs::ReorderFormats with the modified list.

Arranging the formats in a specific order by using IInstallAudioCodecs::ReorderFormats does not guarantee that the top-ranked formats will be used before lower-ranked formats are used. For example, if the sending system is not capable of encoding a top-ranked format, this format will not be used. The same will happen if the receiving system cannot decode this format.

Up Arrow Back to IInstallAudioCodecs Interface

Up Arrow Back to Interfaces Reference

IInstallVideoCodecs

This interface provides methods for adding video codec formats for use with NetMeeting, as well as removing these formats, enumerating them, and changing their use order.
AddVCMFormat
EnumFormats
FreeBuffer
RemoveVCMFormat
ReorderFormats

Up Arrow Back to Interfaces Reference

IInstallVideoCodecs::AddVCMFormat

HRESULT AddVCMFormat(
    PVIDCAP_INFO pVidCapInfo);

Adds a video encoding format for use with NetMeeting.

  • Returns one of the following values:
    S_OK | Success.
    E_INVALIDARG | Invalid argument.
    IC_E_NO_SUCH_FORMAT | The specified format was not found. The format must be installed with Video For Windows before it can be added for use with NetMeeting.
    IC_E_INTERNAL_ERROR | The network audio/video controller reported a system error.
pVidCapInfo
Pointer to the address of the structure.

Up Arrow Back to IInstallVideoCodecs Interface

Up Arrow Back to Interfaces Reference

IInstallVideoCodecs::EnumFormats

HRESULT EnumFormats(
    PVIDCAP_INFO_LIST * ppVidCapInfoList);

Enumerates the video codec formats known to NetMeeting.

  • Returns one of the following values:
    S_OK | Success.
    E_INVALIDARG | Invalid argument.
    E_OUTOFMEMORY | Not enough memory for allocating the enumeration buffer.
    IC_E_NO_FORMATS | No formats were available to enumerate.
    IC_E_INTERNAL_ERROR | The network audio/video controller reported a system error.
ppVidCapInfoList
Address of a pointer to a VIDCAP_INFO_LIST structure that lists the enumerated formats.

The caller is expected to free the returned list by calling IInstallVideoCodecs::FreeBuffer on the same interface.

Up Arrow Back to IInstallVideoCodecs Interface

Up Arrow Back to Interfaces Reference

IInstallVideoCodecs::FreeBuffer

HRESULT FreeBuffer(
    LPVOID lpBuffer);

Frees a buffer that was returned by the IInstallVideoCodecs interface.

  • Returns S_OK if the function was successful.
lpBuffer
Address of the buffer to free. This buffer must have been allocated by one of the IInstallVideoCodecs methods

Up Arrow Back to IInstallVideoCodecs Interface

Up Arrow Back to Interfaces Reference

IInstallVideoCodecs::RemoveVCMFormat

HRESULT RemoveVCMFormat(
    PVIDCAP_INFO pVidCapInfo);

Removes a video format from the list of formats used by NetMeeting.

  • Returns one of the following values:
    S_OK | Success.
    E_INVALIDARG | Invalid argument.
    IC_E_NO_SUCH_FORMAT | The specified format was not found.
    IC_E_INTERNAL_ERROR | The network audio/video controller reported a system error.
pVidCapInfo
Address of the VIDCAP_INFO structure describing the format to remove.

Up Arrow Back to IInstallVideoCodecs Interface

Up Arrow Back to Interfaces Reference

IInstallVideoCodecs::ReorderFormats

HRESULT ReorderFormats(
    PVIDCAP_INFO_LIST pVidCapInfoList);

Reorders the video formats for use with NetMeeting.

  • Returns one of the following values:
    S_OK | Success.
    E_INVALIDARG | Invalid argument.
    IC_E_INTERNAL_ERROR | The network audio/video controller reported a system error.
pVidCapInfoList
Address of the VIDCAP_INFO_LIST structure containing a pointer to the list of formats to reorder and the number of formats in the list.

Since this method can only reorder formats that are known to NetMeeting, it is recommended that the caller first call IInstallVideoCodecs::EnumFormats to get all formats known to NetMeeting, assign new sort indexes (wSortIndex), and then call IInstallVideoCodecs::ReorderFormats with the modified list.

Arranging the formats in a specific order by using IInstallVideoCodecs::ReorderFormats does not guarantee that the top-ranked formats will be used before lower-ranked formats are used. For example, if the sending system is not capable of encoding a top-ranked format, this format will not be used. The same will happen if the receiving system cannot decode this format.

Up Arrow Back to IInstallVideoCodecs Interface

Up Arrow Back to Interfaces Reference


Structures Reference

This section describes the NetMeeting codec data structures and their uses.

AUDCAP_INFO
AUDCAP_INFO_LIST
VIDCAP_INFO
VIDCAP_INFO_LIST
VIDEO_SIZES

AUDCAP_INFO

typedef struct {
    WORD wFormatTag;
    AUDIO_FORMAT_ID Id;
    char szFormat[ACMFORMATDETAILS_FORMAT_CHARS];
    UINT uMaxBitrate;
    UINT uAvgBitrate;
    WORD wCPUUtilizationEncode;
    WORD wCPUUtilizationDecode;
    BOOL bSendEnabled;
    BOOL bRecvEnabled;
    WORD wSortIndex;
} AUDCAP_INFO;

Use this AUDIO capabilities information structure for both input and output when calling capability APIs. The members are input-only, output-only, or input/output, depending on the API used. Behavior is undefined if these are altered.

wFormatTag
ACM format tag.
Id
(Output-only) Local identification (a.k.a. *Handle*) of this capability entry.
szFormat[ACMFORMATDETAILS_FORMAT_CHARS]
(Output-only) Descriptive string of the format; for example, "Microsoft GSM 6.10".
uMaxBitrate
(Output-only) Worst-case bit rate (maximum rate of data transfer).
uAvgBitrate
Average bit rate for this codec.
wCPUUtilizationEncode
Percent utilization of Pentium 90Mhz needed for compression.
wCPUUtilizationDecode
Percent utilization of Pentium 90Mhz needed for decompression.
bSendEnabled
Okay to use this format for sending.
bRecvEnabled
Okay to use this format for receiving.
wSortIndex
Ordered position of this entry in the capability table. Can be used as input only in IInstallAudioCodecs::ReorderFormats method.

Up Arrow Back to Structures Reference

AUDCAP_INFO_LIST

typedef struct {
    ULONG cFormats;
    AUDCAP_INFO aFormats[VARIABLE_DIM];
} AUDCAP_INFO_LIST;

Use this structure to get a list of AUDCAP_INFO structures.

cFormats
Number of AUDCAP_INFO structures in this list.
aFormats[VARIABLE_DIM]
List of AUDCAP_INFO structures with cFormats number of elements.

Up Arrow Back to Structures Reference

VIDCAP_INFO

typedef struct {
    DWORD dwFormatTag;
    VIDEO_FORMAT_ID Id;
    char szFormat[ACMFORMATDETAILS_FORMAT_CHARS];
    WORD wCPUUtilizationEncode;
    WORD wCPUUtilizationDecode;
    BOOL bSendEnabled;
    BOOL bRecvEnabled;
    WORD wSortIndex;
    VIDEO_SIZES enumVideoSize;
    BITMAPINFOHEADER bih;
    UINT uFrameRate;
    DWORD dwBitsPerSample;
    UINT uAvgBitrate;
    UINT uMaxBitrate;
} VIDCAP_INFO, *PVIDCAP_INFO;

Use this VIDEO capabilities information structure for both input and output when calling capability APIs. The fields are input-only, output-only, or input/output, depending on the API used. Behavior is undefined if these are altered.

dwFormatTag
Format tag of this format.
Id
(Output-only) Local identification (a.k.a. *Handle*) of this capability entry.
szFormat[ACMFORMATDETAILS_FORMAT_CHARS]
(Output-only) Descriptive string of the format; for example, "Microsoft H.263" NetMeeting-specific information.
wCPUUtilizationEncode
Percent utilization of Pentium 90Mhz needed for compression.
wCPUUtilizationDecode
Percent utilization of Pentium 90Mhz needed for decompression.
bSendEnabled
Okay to use this format for sending.
bRecvEnabled
Okay to use this format for receiving.
wSortIndex
(Output-only) Ordered position of this entry in the capability table. This variable can be used as input only in IInstallVideoCodecs::ReorderFormats.
enumVideoSize
Video size for this format. Different video sizes for the same formats must be added as separate formats.
bih
BITMAPINFOHEADER structure for the video size in enumVideoSize.
uFrameRate
Number of frames per second displayed by this codec.
dwBitsPerSample
Number of bits per sample for this format. Must match the value in bih.biBitCount in the BITMAPINFOHEADER structure.
uAvgBitrate
Average bit rate for this codec.
uMaxBitrate
(Output-only) Worst-case bit rate (maximum rate of data transfer).

Up Arrow Back to Structures Reference

VIDCAP_INFO_LIST

typedef struct {
    ULONG cFormats;
    VIDCAP_INFO aFormats[VARIABLE_DIM];
} VIDCAP_INFO_LIST;

Use this structure to get a list of VIDCAP_INFO structures.

cFormats
Number of VIDCAP_INFO structures in this list.
aFormats[VARIABLE_DIM]
List of VIDCAP_INFO structures, with cFormats number of elements.

Up Arrow Back to Structures Reference

VIDEO_SIZES

enum VIDEO_SIZES {
    Small,
    Medium,
    Large
};

Use this structure for the enumeration values for the three video sizes supported by NetMeeting.

Small
Small-size video.
Medium
Medium-size video.
Large
Large-size video.

Up Arrow Back to Structures Reference


Licensing and Distribution

Microsoft® NetMeeting™ 2.1 is available for royalty-free distribution with your company's products and services, along with Microsoft Internet Explorer. You'll need to execute the "Internet Explorer License and Distribution Agreement," as well as the "Supplemental Agreement for the Distribution of Microsoft NetMeeting Version 2.1," to distribute NetMeeting with Internet Explorer to your customers.

NetMeeting 2.1 is available for Microsoft Windows® 95 and Windows NT® 4.0. While NetMeeting is royalty-free, the applicable licenses include some obligations to which you must agree. To view and complete the Internet Explorer Distribution License or Site License agreement, visit the Microsoft Internet Explorer Administration Kit License and Distribution Agreement page.

To obtain NetMeeting camera-ready artwork logos, download http://www.microsoft.com/netmeeting/redist/artwork/nmart.zip. These logos can be used on your Web site, or placed on product packaging and collateral, as identified in the Logo Usage Guidelines.


Frequently Asked Questions

The following topics provide answers to the questions most commonly asked about the NetMeeting 2.1 SDK.

General Overview

Software Development

Additional Information


General Overview

How can I have my product/company name listed in the NetMeeting Compatible Products and Services Directory?

How is the NetMeeting SDK different from other conferencing platforms?

Where can I find information on business use of NetMeeting?

What are the bandwidth requirements for NetMeeting?

How are NetMeeting 2.1 and TAPI 3.0 related?

Is NetMeeting compatible with conferencing servers?

How do fire walls affect NetMeeting?

Up Back to Frequently Asked Questions

How can I have my product/company name listed in the NetMeeting Compatible Products and Services Directory?

The Microsoft NetMeeting Compatible Products and Services Directory provides information on some of the products and services from leading vendors that are compatible with NetMeeting. These products and services extend or enhance the capabilities NetMeeting offers, delivering complete solutions to address the business needs of customers. If you are a third-party company that has a product or service that is integrated/compatible with NetMeeting and you'd like to see your information listed in this directory as well as on the NetMeeting Web site, e-mail nmextmkt@microsoft.com.

Up Back to list of General Overview questions

How is the NetMeeting SDK different from other conferencing platforms?

The NetMeeting SDK enables your application to take advantage of international conferencing standards. Since NetMeeting 2.1 is available for free redistribution, neither you nor your customers will need to pay licensing fees to Microsoft for use of your product as long as you complete the licensing agreement.

Up Back to list of General Overview questions

Where can I find information on business use of NetMeeting?

Corporations who wish to adopt NetMeeting as an organizational communication tool should refer to the NetMeeting Resource Kit available on the Microsoft NetMeeting Web site.

Up Back to list of General Overview questions

What are the bandwidth requirements for NetMeeting?

For information on network bandwidth considerations for NetMeeting, see the NetMeeting Resource Kit available on the Microsoft NetMeeting Web site.

Up Back to list of General Overview questions

How are NetMeeting 2.1 and TAPI 3.0 related?

NetMeeting focuses on providing standards-based real-time audio, video, and data collaboration to enable groups of people to work together. If you want to add conferencing functionality, including data collaboration, to your application, the NetMeeting SDK will provide you with the support and information you need.

TAPI 3.0 will provide developers the ability to add multicast H.323-based audio and video to their applications. If you want to add Internet telephony functionality to an existing TAPI application, the TAPI 3.0 interfaces are the best solution for you.

For more information on TAPI, consult the Microsoft TAPI 3.0 Web page.

Up Back to list of General Overview questions

Is NetMeeting compatible with conferencing servers?

For information on conferencing servers, bridges, and multipoint control unit compatibility with NetMeeting, see the NetMeeting Resource Kit available on the Microsoft NetMeeting Web site.

Up Back to list of General Overview questions

How do fire walls affect NetMeeting?

For information on fire walls and NetMeeting, see the NetMeeting Resource Kit available at the Microsoft NetMeeting Web site.

Up Back to list of General Overview questions


Software Development

How can I programmatically cancel my call or request to join a conference before it succeeds?

How can I programmatically leave a conference in which I am participating?

What is the difference between a Conference object (INmConference) and a Call object (INmCall)?

How can I programmatically change the application sharing state in the same way that clicking the Collaborate button in NetMeeting does?

Why is my data broken into 4K chunks when I use SendData?

Is there a limit to the amount of data that can be sent using SendData?

How can I launch a copy of my application on a remote computer?

How can I create a directory of users in my product?

When do I have to use AddRef and Release in NetMeeting?

How can I reactivate audio or video in the NMUI sample after I have disabled them?

How can I switch audio and video between participants in my meeting?

How can I get the conference name for a conference I have joined?

How can I add a NetMeeting call link to my Web page?

Up Back to Frequently Asked Questions

How can I programmatically cancel my call or request to join a conference before it succeeds?

The INmCall::Cancel method can be used to cancel placement of a call or to cancel a request to join a conference. Here's an excerpt from the NetMeeting 2.1 SDK documentation.

INmCall::Cancel
    HRESULT Cancel(void);
    // Cancels the request to join a conference.

When the call is canceled, the application will receive a NM_CALL_CANCELED call state change notification for the Call object.

Up Back to list of Software Development questions

How can I programmatically leave a conference in which I am participating?

The INmConference::Leave method can be used to leave (hang up) a conference in which you are currently participating. Here's an excerpt from the NetMeeting 2.1 SDK documentation.

INmConference::Leave
    HRESULT Leave(void);
    // Removes the local computer from the active conference.

The conference state will change to NM_CONFERENCE_IDLE after all of the members and channels have been removed from the conference.

Up Back to list of Software Development questions

What is the difference between a Conference object (INmConference) and a Call object (INmCall)?

A Conference object has channels and participants (members) while a Call object refers to a specific computer or user. A call is an invitation to join a conference.

Up Back to list of Software Development questions

How can I programmatically change the application sharing state in the same way that clicking the Collaborate button in NetMeeting does?

Use the INmChannelAppShare::SetState method to set the current state to NM_SHARE_IN_CONTROL. This interface provides the same behavior as the Collaborate button in the NetMeeting user interface. It puts the user in the collaborating state and gives the user control of the cursor. Here is an excerpt from the NetMeeting 2.1 SDK documentation.

INmChannelAppShare::SetState
    [in] NM_SHARE_STATE uState,
    // Sets the app sharing state of the local user.

The uState parameter identifies the desired application sharing state. The following values are currently supported for uState:
NM_SHARE_IN_CONTROL | start collaborating and automatically take control of the sharing system
NM_SHARE_WORKING_ALONE | stop collaborating

Up Back to list of Software Development questions

Why is my data broken into 4K chunks when I use SendData?

When INmChannelData::SendData is used with more than 4096 bytes, the low-level T.120 layer breaks the data into manageable packets. The receiveing system can detect this by checking the dwFlags parameter during the INmChannelDataNotify::DataReceived notification.

Up Back to list of Software Development questions

Is there a limit to the amount of data that can be sent using SendData?

A maximum of 65,535 bytes can be sent at a time using the SendData method. This is because the T.120 stack in NetMeeting has a limited amount of memory available for sending data. It is recommended that you segment data into sizes smaller than 4K to optimize for T.120 traffic.

It is important to note that you should always be prepared for SendData to fail regardless of the packet size you choose because other clients of the SDK might be sharing the NetMeeting data channel with your application.

Up Back to list of Software Development questions

How can I launch a copy of my application on a remote computer?

You can use the INmConference::LaunchRemote method to launch a remote copy of your application when in an active conference. To do this, you need two pieces of information:

  • Your application's unique GUID. (For additional information about generating and using GUIDs, see Inside OLE, Second Edition.)
  • The member whose computer you want to start the application on (or use NULL if you want to launch your application on the computer of each person in the conference).
HRESULT LaunchRemote(
    [in] REFGUID rguid,
    [in] INmMember *pMember);
     hr = g_pConference->LaunchRemote(guid, pMember);

Up Back to list of Software Development questions

How can I create a directory of users in my product?

The Internet Locator Server COM interface, included in the NetMeeting 2.1 SDK, enables you to include directory services in your application.

Up Back to list of Software Development questions

When do I have to use AddRef and Release in NetMeeting?

When using the NetMeeting COM interface, you should follow the same rules for use of AddRef and Release as in other COM applications. These are outlined in detail in Chapter 2 of Inside OLE, Second Edition.

When an interface is returned from a method, it must be released. It is not necessary to AddRef or Release an object in a notification callback unless the application intends to use it after the function returns.

Up Back to list of Software Development questions

How can I reactivate audio or video in the NMUI sample after I have disabled them?

To reactivate the destination channel for audio or video, use the SetActive method on the Channel object for the destination channel. Here's an excerpt from the NetMeeting 2.1 SDK documentation.

HRESULT SetActive(
    BOOL fActive);
    // Sets the channel to active or inactive.

Note Instead of disabling the audio and video, you can use the Pause property for each of these channels to achieve a similar effect without actually disconnecting the channel.

For video, use the INmChannelVideo::SetProperty method and set the NM_VIDPROP property to NM_VIDPROP_PAUSE. Here's an excerpt from the NetMeeting 2.1 SDK documentation.

HRESULT SetProperty(
    [in] NM_VIDPROP uID,
    [in] ULONG uValue);
    // Sets the display properties of the current video channel.

For audio, use the INmChannelAudio::SetProperty method and set the NM_AUDPROP property to NM_AUDPROP_PAUSE (paused). Here's an excerpt from the NetMeeting 2.1 SDK documentation.

HRESULT SetProperty(
    [in] NM_AUDPROP uID,
    [in] ULONG uValue);
    // Sets the property values of the current audio channel.

How can I switch audio and video between participants in my meeting?

To switch audio and video from one meeting participant to another, you must:

  1. Deactivate the currently active audio channel.
  2. Activate the audio channel with the member to whom you are going to switch.

If you do not already have your own pointers to the appropriate audio channels, you can find a specific audio channel by using INmConference::EnumChannel to get an enumerator for all the channels in the conference. Here's an excerpt from the NetMeeting 2.1 SDK documentation.

HRESULT EnumChannel(
    [out] IEnumNMChannel **ppEnum);

Then use IEnumNmChannel::Next to traverse the list of channels until you find the audio channel for the member you want to switch to. Here's an excerpt from the NetMeeting 2.1 SDK documentation.

HRESULT Next(
    [in] ULONG cConference,
    [out] INmConference **rgpConference,
    [out] ULONG *pcFetched);

An audio channel can be identified using INmChannel::GetNmch:

HRESULT GetNmch(
    [out] ULONG *puCh);

The value returned in by puCh will be NMCH_AUDIO if it is an audio channel.

For each of the audio channels, you can then use INmChannel::EnumMember to get an enumerator for all the Member objects in each channel. Note that the audio channel will have only one member.

HRESULT EnumMember(
    [out] IEnumNmMember **ppEnum);

The easiest way to deactivate the current audio channel is to set your own active audio channel to inactive using INmChannel::SetActive:

HRESULT SetActive(
    BOOL fActive);

Make sure to set fActive to FALSE.

Wait for the INmConferenceNotify::ChannelChanged notification. When you get it, check to make sure that the notification is for the channel that you just deactivated and that the channel's state is NM_AUDIO_IDLE.

Finally, to activate the destination channel for audio and video, use the SetActive method on the Channel object for the destination channel to set fActive to TRUE.

Up Back to list of Software Development questions

How can I get the conference name for a conference I have joined?

INmConference::GetName can be used to retrieve the name of the conference in which a member is participating. However, a called member should not use this method until it receives an NM_MEMBER_UPDATED notification for itself and the member's capabilities include NMCH_DATA. For example:

case NM_MEMBER_UPDATED:
    hResult = pMember->GetNmchCaps(&uCaps);
    if ((uCaps == NMCH_DATA) && (S_OK == pMember->IsSelf()))
        //if the member has Data Channel capabilities, you can GetName
        hResult = pConf->GetName(&bstrConfName);

Up Back to list of Software Development questions

How can I add a NetMeeting call link to my Web page?

Using Microsoft® Internet Explorer, people can call you using a link on your Web page even if they do not have NetMeeting running. Use one of the following formats to create a NetMeeting call link on your Web page:

Format | Example
callto:DNS name | callto:machine2.test.com
callto:IP address | callto:157.55.22.31
callto:e-mail address | callto:user@test.com
callto:server name/e-mail address | callto:uls4.microsoft.com/user@test.com

For example, if John Smith wanted to embed a link in his Web page so that other people could call him, he would add the following HTML tag:

Call me using NetMeeting at
<A HREF="callto:uls.microsoft.com/jsmith@somedomain.com>
uls.microsoft.com/jsmith@somedomain.com</A>

Up Back to list of Software Development questions


Additional Information

Where can I learn more about NetMeeting?

Where can I learn more about the NetMeeting SDK?

Where can I find more information about the Internet Locator Server (formerly known as the User Location Service)?

Are NetMeeting sample applications available?

Where can I find more information about programming using COM?

Where can I send feedback and questions about the NetMeeting SDK?

Up Back to Frequently Asked Questions

Where can I learn more about NetMeeting?

For additional information about NetMeeting, visit the Microsoft NetMeeting web site.

Up Back to list of Additional Information questions

Where can I learn more about the NetMeeting SDK?

For information about the NetMeeting SDK, visit the Authors & Developers section of the NetMeeting web site.

Up Back to list of Additional Information questions

Where can I find more information about the Internet Locator Server (formerly known as the User Location Service)?

For additional information about the Internet Locator Server (ILS), visit the NetMeeting web site.

Up Back to list of Additional Information questions

Are NetMeeting sample applications available?

In addition to the tutorials provided in this documentation, the NetMeeting SDK includes several sample applications that are located in the samples folder of your NetMeeting SDK directory. The Samples.txt file located in the NetMeeting SDK directory contains information to aid you in your use of these samples.

The NetMeeting SDK can be downloaded for free from the NetMeeting web site.

Up Back to list of Additional Information questions

Where can I find more information about programming using COM?

More information about programming using COM can be found at the Microsoft Developer Network site, the Microsoft OLE Development site, and in Inside OLE, Second Edition.

Up Back to list of Additional Information questions

Where can I send feedback and questions about the NetMeeting SDK?

Support for Microsoft NetMeeting and the NetMeeting SDK is provided through standard Microsoft product support channels; see the Microsoft Support Online pages for details. In addition, the following newsgroup is available for you to interact and share information with other users of the SDK: //msnews.microsoft.com/microsoft.public.internet.activexconferencing.sdk.

We also welcome feedback about the NetMeeting SDK at msconf@microsoft.com.

Up Back to list of Additional Information questions


XMSConf Sample

User Name :
Member Roster :
Conference Log :
File to transfer :
Received text :
Transmitted text :
Application to share :