Title and Copyright Information
 
Preface
The Open Group
The Development of Product Standards
Open Group Publications
Versions and Issues of Specifications
Corrigenda
Ordering Information
Typographical Conventions
Problem Reporting
 
Part 1 -- ActiveX Core Technology Introduction
 
1    Introduction and Terminology
1.1    The Component Object Model
1.1.1    COM Infrastructure
1.1.2    ORPC
1.1.3    Service Control Manager
1.1.4    Security
1.1.5    Error Handling
1.1.6    Uniform Data Transfer
1.1.7    Structured Storage
1.1.7.1    Persistent Property Sets
1.1.8    Persistent Objects
1.1.9    Monikers
1.1.10    Connectable Objects
1.1.11    Component Categories
1.1.12    Licensing
1.1.13    Type Libraries
1.1.14    Automation
1.2    MS-RPC
1.3    Registry
1.4    Security Support Provider Interface
1.5    Windows NT Distributed Security Provider
 
2    The Motivations for COM
2.1    Challenges Facing The Software Industry
2.2    The Solution: Component Software
2.3    The Component Software Solution: COM
2.3.1    Reusable Component Objects
2.3.2    Binary and Wire-Level Standards for Interoperability
2.3.2.1    Why Is Providing a Binary and Network Standard Important?
2.3.2.2    COM's Standards Enable Object Interoperability
2.3.3    A True System Object Model
2.3.3.1    Globally Unique Identifiers
2.3.3.2    Code Reusability and Implementation Inheritance
2.3.3.3    Single Programming Model
2.3.3.4    Life-cycle Encapsulation
2.3.3.5    Security
2.3.4    Distributed Capabilities
 
3    Component Object Model Technical Overview
3.1    Objects and Interfaces
3.1.1    Attributes of Interfaces
3.1.2    Object Pictures
3.1.3    Objects with Multiple Interfaces and QueryInterface
3.1.3.1    Robustly Evolving Functionality Over Time
3.1.4    Interfaces and C++ Classes
3.1.5    Interfaces and Inheritance
3.1.6    Interface Definitions: IDL
3.1.7    Basic Operations: The IUnknown Interface
3.1.7.1    Navigating Multiple Interfaces: the QueryInterface Function
3.1.7.2    Reference Counting: Controlling Object Life-cycle
3.1.8    How an Interface Works
3.1.9    Interfaces Enable Interoperability
3.1.9.1    Polymorphism
3.1.9.2    Encapsulation
3.1.9.3    Transparent Remoting
3.2    Clients, Servers, and Object implementors
3.2.1    Server Flavors: In-Process and Out-Of-Process
3.2.2    Location Transparency
3.3    Memory Management Rules
3.4    The COM Client/Server Model
3.4.1    COM Objects and Class Identifiers
3.4.2    COM Clients
3.4.3    COM Servers
3.4.4    The COM Library and Service Control Manager
3.4.5    Architecture for Distributed Objects
3.4.6    The Service Control Manager
3.4.7    Security
3.4.7.1    Security by Configuration
3.4.7.2    Programmatic Control Over Security
3.4.7.3    Security on the Internet
3.5    Object Reusability
3.5.1    COM Reusability Mechanisms
3.6    Connectable Objects and Events
3.7    Error Codes and Error Handling
3.8    Enumerators and Enumerator Interfaces
3.9    Persistent Storage
3.9.1    A File System Within A File
3.9.2    Storage and Stream Objects
3.9.3    Application Design with Structured Storage
3.9.4    Naming Elements
3.9.5    Direct Access vs. Transacted Access
3.9.6    Browsing Elements
3.9.7    Persistent Objects
3.10    Persistent, Intelligent Names: Monikers
3.10.1    Moniker Objects
3.10.2    Types of Monikers
3.10.3    Connections and Reconnections
3.11    Uniform Data Transfer
3.11.1    Isolation of Transfer Protocols
3.11.2    Data Formats and Transfer Mediums
3.11.3    Data Selection
3.11.4    Notification
3.12    Type Libraries
3.13    Automation
 
Part 2 -- Component Object Model Programming Interface
 
4    Objects and Interfaces
4.1    Interfaces
4.1.1    The Interface Binary Standard
4.1.2    Interface Definition and Identity
4.1.3    Defining Interfaces: IDL
4.1.4    C vs. C++ vs. ...
4.1.5    Remoting Magic Through Vtbls
4.2    Globally Unique Identifiers
4.3    The IUnknown Interface
4.3.1    Reference Counting
4.4    Providing Class Information
4.5    Connectable Objects and Events
4.6    Designing and Implementing Objects
4.6.1    Implementing Interfaces: Multiple Inheritance
4.6.2    Implementing Interfaces: Interface Containment
4.7    Objects And Interfaces API Descriptions
4.7.1    IUnknown
IUnknown::AddRef()
IUnknown::QueryInterface()
IUnknown::Release()
4.7.2    IProvideClassInfo
IProvideClassInfo::GetClassInfo()
4.7.3    IProvideClassInfo2
IProvideClassInfo2::GetGUID()
4.8    Objects and Interfaces Enumeration Description
4.8.1    GUIDKIND
 
5    The COM Library
5.1    COM Application Responsibilities
5.2    Library Initialization / Uninitialization
5.3    Memory Management
5.3.1    Memory Allocation Example
5.4    COM Library Interface Descriptions
5.4.1    IMalloc
IMalloc::Alloc()
IMalloc::DidAlloc()
IMalloc::Free()
IMalloc::GetSize()
IMalloc::HeapMinimize()
IMalloc::Realloc()
5.4.2    IMallocSpy
IMallocSpy::PreAlloc()
IMallocSpy::PostAlloc()
IMallocSpy::PreDidAlloc()
IMallocSpy::PostDidAlloc()
IMallocSpy::PreFree()
IMallocSpy::PostFree()
IMallocSpy::PreGetSize()
IMallocSpy::PostGetSize()
IMallocSpy::PreHeapMinimize()
IMallocSpy::PostHeapMinimize()
IMallocSpy::PreRealloc()
IMallocSpy::PostRealloc()
5.4.3    IOleContainer
IOleContainer::EnumObjects()
IOleContainer::LockContainer()
5.4.4    IPersistMoniker
IPersistMoniker::GetCurMoniker()
IPersistMoniker::IsDirty()
IPersistMoniker::Load()
IPersistMoniker::Save()
IPersistMoniker::SaveCompleted()
5.4.5    IRunnableObject
IRunnableObject::GetRunningClass()
IRunnableObject::IsRunning()
IRunnableObject::LockRunning()
IRunnableObject::Run()
IRunnableObject::SetContainedObject()
5.5    COM Library API Descriptions
CoGetMalloc()
CoInitialize()
CoInitializeEx()
CoTaskMemAlloc()
CoTaskMemFree()
CoTaskMemRealloc()
CoUninitialize()
CoRegisterMallocSpy()
CoRevokeMallocSpy()
CLSIDFromProgID()
CLSIDFromString()
CoCreateGuid()
CoDosDateTimeToFileTime()
CoFileTimeNow()
CoFileTimeToDosDateTime()
CoGetCurrentProcess()
IIDFromString()
IsEqualGUID()
IsEqualCLSID()
IsEqualIID()
GetRunningObjectTable()
ProgIDFromCLSID()
StringFromCLSID()
StringFromGUID2()
StringFromIID()
CoRegisterMessageFilter()
5.6    COM Library Enumeration Definitions
COINIT()
 
6    COM Threading Models
6.1    Choosing the Threading Model
6.2    Single-threaded Apartments
6.3    Multi-threaded Apartments
6.4    Single-/Multi-threaded Communication
6.5    In-process server Threading Issues
6.6    Process and Thread Related Interface Descriptions
6.6.1    IMessageFilter
IMessageFilter::HandleInComingCall()
IMessageFilter::MessagePending()
IMessageFilter::RetryRejectedCall()
6.7    Process and Thread Related API Descriptions
CoCreateFreeThreadedMarshaler()
CoGetInterfaceAndReleaseStream()
CoMarshalInterThreadInterfaceInStream()
6.8    Process and Thread Related Structure Descriptions
6.8.1    INTERFACEINFO
6.9    Process and Thread Related Enumeration Descriptions
6.9.1    CALLTYPE
6.9.2    PENDINGMESSAGE
6.9.3    PENDINGTYPE
6.9.4    SERVERCALL
 
7    COM Clients
7.1    Getting a Pointer to an Object
7.1.1    Creating an Object through a Class Object
7.1.2    COM Class Objects and CLSIDs
7.1.3    Locating a Remote Object
7.1.4    Instance Creation Helper Functions
7.2    Initializing the Object
7.3    Managing the Object
7.4    Releasing the Object
7.5    Server Management
7.6    Client Related Interface Descriptions
7.6.1    ICatInformation
ICatInformation::EnumCategories()
ICatInformation::EnumClassesOfCategories()
ICatInformation::EnumImplCategoriesOfClass()
ICatInformation::EnumReqCategoriesOfClass()
ICatInformation::GetCategoryDesc()
ICatInformation::IsClassOfCategories()
7.6.2    IMultiQI
IMultiQI::QueryMultipleInterfaces()
7.7    Client Related API Descriptions
CoCreateInstance()
CoCreateInstanceEx()
CoFreeAllLibraries()
CoFreeLibrary()
CoFreeUnusedLibraries()
CoGetClassObject()
CoGetInstanceFromFile()
CoGetInstanceFromIStorage()
CoGetTreatAsClass()
CoIsHandlerConnected()
CoLoadLibrary()
CoTreatAsClass()
7.8    COM Client Related Structure Definitions
7.8.1    MULTI_QI
7.9    COM Client Related Enumeration Definitions
7.9.1    CLSCTX
 
8    COM Servers
8.1    COM Server Responsibilities
8.2    Implementing IClassFactory
8.3    Licensing and IClassFactory2
8.4    Registering COM Servers
8.4.1    Registering a Class at Installation
8.4.2    Registering a Running EXE Server
8.4.3    Registering Objects in the ROT
8.5    Self-Registration
8.6    Out-of-process Server Implementation Helpers
8.7    Object Handlers
8.8    Object Reusability
8.8.1    Reusability Through Containment
8.8.2    Reusability Through Aggregation
8.8.2.1    Caching interfaces on the inner object
8.8.2.2    Efficiency at any Depth of Aggregation
8.9    Emulating Other Servers
8.10    COM Server Related Interface Descriptions
8.10.1    ICatRegister
ICatRegister::RegisterCategories()
ICatRegister::RegisterClassImplCategories()
ICatRegister::RegisterClassReqCategories()
ICatRegister::UnRegisterCategories()
ICatRegister::UnRegisterClassImplCategories()
ICatRegister::UnRegisterClassReqCategories()
8.10.2    IClassFactory
IClassFactory::CreateInstance()
IClassFactory::LockServer()
8.10.3    IClassFactory2
IClassFactory2::CreateInstanceLic()
IClassFactory2::GetLicInfo()
IClassFactory2::RequestLicKey()
8.10.4    IExternalConnection
IExternalConnection::AddConnection()
IExternalConnection::ReleaseConnection()
8.11    COM Server Related API Descriptions
CoDisconnectObject()
CoLockObjectExternal()
CoRevokeClassObject()
CoRegisterClassObject()
DllCanUnloadNow()
DllGetClassObject()
DllRegisterServer()
DllUnregisterServer()
CoAddRefServerProcess()
CoReleaseServerProcess()
CoResumeClassObjects()
CoSuspendClassObjects()
8.12    COM Server Related Structure Definitions
LICINFO()
8.13    COM Server Related Enumeration Definitions
8.13.1    REGCLS
 
9    Interface Remoting and Marshaling
9.1    How Interface Remoting Works
9.2    Architecture of Custom Object Marshaling
9.3    Architecture of Standard Interface / Object Marshaling
9.4    Architecture of Handler Marshaling
9.5    Standards for Marshaled Data Packets
9.6    Creating an Initial Connection Between Processes
9.7    Interface Remoting and Marshaling Interface Descriptions
9.7.1    IMarshal
IMarshal::DisconnectObject()
IMarshal::GetMarshalSizeMax()
IMarshal::GetUnmarshalClass()
IMarshal::MarshalInterface()
IMarshal::ReleaseMarshalData()
IMarshal::UnmarshalInterface()
9.7.2    IMarshal - Default Implementation
9.7.3    IPSFactoryBuffer
IPSFactoryBuffer::CreateProxy()
IPSFactoryBuffer::CreateStub()
9.7.4    IRpcChannelBuffer
9.7.4.1    RPCOLEMESSAGE and related structures
IRpcChannelBuffer::GetBuffer()
IRpcChannelBuffer::SendReceive()
IRpcChannelBuffer::FreeBuffer()
IRpcChannelBuffer::GetDestCtx()
IRpcChannelBuffer::IsConnected()
9.7.5    IRpcProxyBuffer
IRpcProxyBuffer::Connect()
IRpcProxyBuffer::Disconnect()
9.7.6    IRpcStubBuffer
IRpcStubBuffer::Connect()
IRpcStubBuffer::Disconnect()
IRpcStubBuffer::Invoke()
IRpcStubBuffer::IsIIDSupported()
IRpcStubBuffer::CountRefs()
IRpcStubBuffer::DebugServerQueryInterface()
IRpcStubBuffer::DebugServerRelease()
9.7.7    IStdMarshalInfo
IStdMarshalInfo::GetClassForHandler()
9.8    Interface Remoting and Marshaling API Descriptions
CoGetMarshalSizeMax()
CoGetStandardMarshal()
CoGetPSClsid()
CoMarshalHresult()
CoMarshalInterface()
CoRegisterPSClsid()
CoReleaseMarshalData()
CoUnmarshalHresult()
CoUnmarshalInterface()
9.9    Interface Remoting and Marshaling Enumeration Definitions
9.9.1    EXTCONN
9.9.2    MSHCTX
9.9.3    MSHLFLAGS
 
10    Security in COM
10.1    Launch Security
10.2    Call Security
10.3    Security Related Interface Descriptions
10.3.1    IClientSecurity
IClientSecurity::CopyProxy()
IClientSecurity::QueryBlanket()
IClientSecurity::SetBlanket()
10.3.2    IServerSecurity
IServerSecurity::QueryBlanket()
IServerSecurity::ImpersonateClient()
IServerSecurity::RevertToSelf()
IServerSecurity::IsImpersonating()
10.4    Security Related API Descriptions
CoCopyProxy()
CoGetCallContext()
CoImpersonateClient()
CoInitializeSecurity()
CoQueryAuthenticationServices()
CoQueryClientBlanket()
CoQueryProxyBlanket()
CoRevertToSelf()
CoSetProxyBlanket()
10.5    Security Related Structure Definitions
10.5.1    COAUTHINFO
10.5.2    COSERVERINFO
10.6    Security Related Enumeration Descriptions
10.6.1    RPC_C_AUTHN_XXX
10.6.2    RPC_C_AUTH_LEVEL_XXX
10.6.3    RPC_C_AUTHZ_XXX
10.6.4    RPC_C_IMP_LEVEL_XXX
 
11    NTLM
11.1    NTLM Passthrough Architecture
11.2    NTLM Security
11.2.1    Protocol
11.2.2    The Negotiate Message
11.2.2.1    Flag Details
11.2.3    The Challenge Message
11.2.3.1    Flag Details
11.2.4    The Authenticate Message
11.2.5    Reauthentication
11.2.6    Challenge Algorithm
11.2.7    Response Message Algorithm
11.2.8    Session Key Algorithm
11.3    Client-Passthrough Communications
11.4    Passthrough-Domain Communications
11.5    Bibliography
 
12    Error Handling
12.1    Returning Error Information
12.2    Retrieving Error Information
12.3    Error Handling API Descriptions
12.3.1    IErrorInfo
IErrorInfo::GetDescription()
IErrorInfo::GetGUID()
IErrorInfo::GetHelpContext()
IErrorInfo::GetHelpFile()
IErrorInfo::GetSource()
12.3.2    ICreateErrorInfo
ICreateErrorInfo::SetDescription()
ICreateErrorInfo::SetGUID()
ICreateErrorInfo::SetHelpContext()
ICreateErrorInfo::SetHelpFile()
ICreateErrorInfo::SetSource()
12.3.3    ISupportErrorInfo
ISupportErrorInfo::InterfaceSupportsErrorInfo()
CreateErrorInfo()
GetErrorInfo()
SetErrorInfo()
12.3.4    HRESULT
12.3.4.1    Use of FACILITY_ITF
12.3.5    IErrorLog
12.3.5.1    When to Implement
12.3.5.2    When to Use
12.3.5.3    See Also
IErrorLog::AddError()
 
13    Enumerators and Enumerator Interfaces
IEnum::Next()
IEnum::Skip()
IEnum::Reset()
IEnum::Clone()
 
14    Connectable Objects
14.1    Connectable Objects Interface Descriptions
14.1.1    IConnectionPoint
IConnectionPoint::GetConnectionInterface()
IConnectionPoint::GetConnectionPointContainer()
IConnectionPoint::Advise()
IConnectionPoint::Unadvise()
IConnectionPoint::EnumConnections()
14.1.2    IConnectionPointContainer
IConnectionPointContainer::EnumConnectionPoints()
IConnectionPointContainer::FindConnectionPoint()
14.1.3    IEnumConnectionPoints
IEnumConnectionPoints::Next()
IEnumConnectionPoints::Skip()
IEnumConnectionPoints::Reset()
IEnumConnectionPoints::Clone()
14.1.4    IEnumConnections
IEnumConnections::Next()
IEnumConnections::Skip()
IEnumConnections::Reset()
IEnumConnections::Clone()
14.2    Connectable Objects Structure Descriptions
14.2.1    CONNECTDATA
 
15    Persistent Storage
15.1    Interfaces
15.2    API Functions
15.3    Access Modes
15.3.1    Transaction Flags
15.3.2    Storage Creation Flags
15.3.3    Temporary Creation Flag
15.3.4    Priority Flag
15.3.5    Access Permission Flags
15.3.6    Shared Access Flags
15.4    Storage Object Naming Conventions
15.5    Persistent Property Sets
15.5.1    Managing Property Sets
15.5.2    Managing Properties
15.5.3    Using Property Sets
15.5.3.1    The Summary Information Property Set
15.5.3.1.1    Guidelines for Implementing the Summary Information Property Set
15.5.4    Property Set Implementations
15.5.4.1    Performance Characteristics
15.5.5    Using Implemented Property Sets
15.5.6    IPropertySetStorage Implementation Considerations
15.5.7    Names in IStorage
15.5.8    Storage vs Stream for a Property Set
15.5.9    Setting the CLSID of the Property Set
15.5.10    Synchronization Points
15.5.11    Code pages: Unicode strings, Macintosh, etc.
15.5.12    Dictionary
15.5.13    Extensions
15.6    Persistent Storage Interface Descriptions
15.6.1    IEnumSTATPROPSETSTG
15.6.2    IEnumSTATPROPSETSTG-Compound File Implementation
15.6.3    IEnumSTATPROPSTG
15.6.4    IEnumSTATPROPSTG-Compound File Implementation
15.6.5    IEnumSTATSTG
15.6.6    ILockBytes
ILockBytes::Flush()
ILockBytes::LockRegion()
ILockBytes::ReadAt()
ILockBytes::SetSize()
ILockBytes::Stat()
ILockBytes::UnlockRegion()
ILockBytes::WriteAt()
15.6.7    ILockBytes - File-Based Implementation
15.6.8    ILockBytes - Global Memory Implementation
15.6.9    IPersist
IPersist::GetClassID()
15.6.10    IPersistFile
IPersistFile::GetCurFile()
IPersistFile::IsDirty()
IPersistFile::Load()
IPersistFile::Save()
IPersistFile::SaveCompleted()
15.6.11    IPersistMemory
IPersistMemory::GetSizeMax()
IPersistMemory::InitNew()
IPersistMemory::IsDirty()
IPersistMemory::Load()
IPersistMemory::Save()
15.6.12    IPersistPropertyBag
IPersistPropertyBag::InitNew()
IPersistPropertyBag::Load()
IPersistPropertyBag::Save()
15.6.13    IPersistStorage
IPersistStorage::HandsOffStorage()
IPersistStorage::InitNew()
IPersistStorage::IsDirty()
IPersistStorage::Load()
IPersistStorage::Save()
IPersistStorage::SaveCompleted()
15.6.14    IPersistStream
IPersistStream::GetSizeMax()
IPersistStream::IsDirty()
IPersistStream::Load()
IPersistStream::Save()
15.6.15    IPersistStreamInit
IPersistStreamInit::GetSizeMax()
IPersistStreamInit::InitNew()
IPersistStreamInit::IsDirty()
IPersistStreamInit::Load()
IPersistStreamInit::Save()
15.6.16    IPropertyBag
IPropertyBag::Read()
IPropertyBag::Write()
15.6.17    IPropertySetStorage
IPropertySetStorage::Create()
IPropertySetStorage::Delete()
IPropertySetStorage::Enum()
IPropertySetStorage::Open()
15.6.18    IPropertySetStorage-Compound File Implementation
15.6.19    IPropertySetStorage-Standalone Implementation
15.6.20    IPropertyStorage
IPropertyStorage::Commit()
IPropertyStorage::DeleteMultiple()
IPropertyStorage::DeletePropertyNames()
IPropertyStorage::Enum()
IPropertyStorage::ReadMultiple()
IPropertyStorage::ReadPropertyNames()
IPropertyStorage::Revert()
IPropertyStorage::Stat()
IPropertyStorage::SetClass()
IPropertyStorage::SetTimes()
IPropertyStorage::WriteMultiple()
IPropertyStorage::WritePropertyNames()
15.6.21    IPropertyStorage-Compound File Implementation
15.6.22    IPropertyStorage-Standalone Implementation
15.6.23    IRootStorage
IRootStorage::SwitchToFile()
15.6.24    IRootStorage - Compound File Implementation
15.6.25    IStorage
IStorage::Commit()
IStorage::CopyTo()
IStorage::CreateStorage()
IStorage::CreateStream()
IStorage::DestroyElement()
IStorage::EnumElements()
IStorage::MoveElementTo()
IStorage::OpenStorage()
IStorage::OpenStream()
IStorage::RenameElement()
IStorage::Revert()
IStorage::SetClass()
IStorage::SetElementTimes()
IStorage::SetStateBits()
IStorage::Stat()
15.6.26    IStorage - Compound File Implementation
15.6.27    IStream
IStream::Clone()
IStream::Commit()
IStream::CopyTo()
IStream::LockRegion()
IStream::Read()
IStream::Revert()
IStream::Seek()
IStream::SetSize()
IStream::Stat()
IStream::UnlockRegion()
IStream::Write()
15.6.28    IStream - Compound File Implementation
15.7    Persistent Storage API Descriptions
FreePropVariantArray()
PropStgNameToFmtId()
PropVariantClear()
PropVariantCopy()
ReadClassStg()
ReadClassStm()
ReadFmtUserTypeStg()
SetConvertStg()
StgCreateDocfile()
StgCreateDocfileOnILockBytes()
StgCreatePropSetStg()
StgCreatePropStg()
StgIsStorageFile()
StgIsStorageILockBytes()
StgOpenPropStg()
StgOpenStorage()
StgOpenStorageOnILockBytes()
StgSetTimes()
WriteClassStg()
WriteClassStm()
WriteFmtUserTypeStg()
CreateILockBytesOnHGlobal()
CreateStreamOnHGlobal()
GetClassFile()
GetConvertStg()
GetHGlobalFromILockBytes()
GetHGlobalFromStream()
15.8    Persistent Storage Structure Descriptions
15.8.1    FILETIME
15.8.2    RemSNB
15.8.3    STATPROPSETSTG
15.8.4    STATPROPSTG
15.8.5    STATSTG
15.9    Persistent Storage Enumeration Descriptions
15.9.1    LOCKTYPE
15.9.2    PROPSETFLAG
15.9.3    STGC
15.9.4    STGFMT
15.9.5    STGM
15.9.6    STGMOVE
15.9.7    STGTY
15.9.8    STREAM_SEEK
 
16    Persistent Intelligent Names: Monikers
16.1    Overview
16.2    Moniker Interface Descriptions
16.2.1    IBindCtx
IBindCtx::EnumObjectParam()
IBindCtx::GetBindOptions()
IBindCtx::GetObjectParam()
IBindCtx::GetRunningObjectTable()
IBindCtx::RegisterObjectBound()
IBindCtx::RegisterObjectParam()
IBindCtx::ReleaseBoundObjects()
IBindCtx::RevokeObjectBound()
IBindCtx::RevokeObjectParam()
IBindCtx::SetBindOptions()
16.2.2    IClassActivator
IClassActivator::GetClassObject()
16.2.3    IEnumMoniker
16.2.4    IEnumString
16.2.5    IEnumUnknown
16.2.6    IMoniker
IMoniker::BindToObject()
IMoniker::BindToStorage()
IMoniker::CommonPrefixWith()
IMoniker::ComposeWith()
IMoniker::Enum()
IMoniker::GetDisplayName()
IMoniker::GetTimeOfLastChange()
IMoniker::Hash()
IMoniker::Inverse()
IMoniker::IsEqual()
IMoniker::IsRunning()
IMoniker::IsSystemMoniker()
IMoniker::ParseDisplayName()
IMoniker::Reduce()
IMoniker::RelativePathTo()
16.2.7    IMoniker - Anti-Moniker Implementation
16.2.8    IMoniker - Class Moniker Implementation
16.2.9    IMoniker - File Moniker Implementation
16.2.10    IMoniker - Generic Composite Moniker Implementation
16.2.11    IMoniker - Item Moniker Implementation
16.2.12    IMoniker - Pointer Moniker Implementation
16.2.13    IOleItemContainer
IOleItemContainer::GetObject()
IOleItemContainer::GetObjectStorage()
IOleItemContainer::IsRunning()
16.2.14    IParseDisplayName
IParseDisplayName::ParseDisplayName()
16.2.15    IROTData
IROTData::GetComparisonData()
16.2.16    IRunningObjectTable
IRunningObjectTable::EnumRunning()
IRunningObjectTable::GetObject()
IRunningObjectTable::GetTimeOfLastChange()
IRunningObjectTable::IsRunning()
IRunningObjectTable::NoteChangeTime()
IRunningObjectTable::Register()
IRunningObjectTable::Revoke()
16.3    Moniker API Descriptions
BindMoniker()
MkParseDisplayName()
MkParseDisplayNameEx()
MonikerCommonPrefixWith()
MonikerRelativePathTo()
CreateAntiMoniker()
CreateBindCtx()
CreateClassMoniker()
CreateFileMoniker()
CreateGenericComposite()
CreateItemMoniker()
CreatePointerMoniker()
16.4    Moniker Structure Definitions
16.4.1    BIND_OPTS
16.4.2    BIND_OPTS2
16.5    Moniker Enumeration Definitions
16.5.1    BIND_FLAGS
16.5.2    MKRREDUCE
16.5.3    MKSYS
 
17    Uniform Data Transfer
17.1    Data Transfer Interfaces
17.2    Data Formats and Transfer Media
17.2.1    The FORMATETC Structure
17.2.2    The STGMEDIUM Structure
17.3    Data Notification
17.4    Uniform Data Transfer Interface Descriptions
17.4.1    IAdviseSink
17.4.1.1    Methods
17.4.1.1.1    When to Implement
17.4.1.1.2    When to Use
17.4.1.1.3    Notes
17.4.1.1.4    See Also
IAdviseSink::OnClose()
IAdviseSink::OnDataChange()
IAdviseSink::OnRename()
IAdviseSink::OnSave()
IAdviseSink::OnViewChange()
17.4.2    IDataAdviseHolder
IDataAdviseHolder::Advise()
IDataAdviseHolder::EnumAdvise()
IDataAdviseHolder::SendOnDataChange()
IDataAdviseHolder::Unadvise()
17.4.3    IDataObject
IDataObject::DAdvise()
IDataObject::DUnadvise()
IDataObject::EnumDAdvise()
IDataObject::EnumFormatEtc()
IDataObject::GetCanonicalFormatEtc()
IDataObject::GetData()
IDataObject::GetDataHere()
IDataObject::QueryGetData()
IDataObject::SetData()
17.4.4    IEnumFORMATETC
17.4.5    IEnumSTATDATA
17.5    Uniform Data Transfer API Descriptions
CreateDataAdviseHolder()
CreateFormatEnumerator()
ReleaseStgMedium()
17.6    Uniform Data Transfer Structure Descriptions
17.6.1    DVASPECTINFO
17.6.2    DVEXTENTINFO
17.6.3    DVTARGETDEVICE
17.6.4    FORMATETC
17.6.5    STATDATA
17.6.6    STGMEDIUM
17.7    Uniform Data Transfer Enumeration Descriptions
17.7.1    ADVF
17.7.2    DATADIR
17.7.3    DVASPECT
17.7.4    DVASPECT2
17.7.5    DVASPECTINFOFLAG
17.7.6    STATFLAG
17.7.7    TYMED
 
18    Type Libraries
18.1    Overview of Type Description Interfaces
18.1.1    Type Descriptions
18.1.1.1    Alias
18.1.1.2    Enumeration (Statement)
18.1.1.3    Structure (Statement)
18.1.1.4    Union (Statement)
18.1.1.5    Module (Statement)
18.1.1.6    V-table Interface
18.1.1.7    IDispatch Interface
18.1.1.8    Dual Interface
18.1.1.9    Component Object Classes
18.2    Type Library Interface Descriptions
18.2.1    IProvideClassInfo
18.2.2    IProvideClassInfo2
18.2.3    ITypeLib
ITypeLib::FindName()
ITypeLib::GetDocumentation()
ITypeLib::GetLibAttr()
ITypeLib::GetTypeComp()
ITypeLib::GetTypeInfo()
ITypeLib::GetTypeInfoCount()
ITypeLib::GetTypeInfoOfGuid()
ITypeLib::GetTypeInfoType()
ITypeLib::IsName()
ITypeLib::ReleaseTLibAttr()
18.2.4    ITypeLib2
ITypeLib2::GetCustData()
ITypeLib2::GetDocumentation2()
ITypeLib2::GetLibStatistics()
ITypeLib2::GetAllCustData()
18.2.5    ITypeInfo
ITypeInfo::AddressOfMember()
ITypeInfo::CreateInstance()
ITypeInfo::GetContainingTypeLib()
ITypeInfo::GetDllEntry()
ITypeInfo::GetDocumentation()
ITypeInfo::GetFuncDesc()
ITypeInfo::GetIDsOfNames()
ITypeInfo::GetImplTypeFlags()
ITypeInfo::GetMops()
ITypeInfo::GetNames()
ITypeInfo::GetRefTypeInfo()
ITypeInfo::GetRefTypeOfImplType()
ITypeInfo::GetTypeAttr()
ITypeInfo::GetTypeComp()
ITypeInfo::GetVarDesc()
ITypeInfo::Invoke()
ITypeInfo::ReleaseFuncDesc()
ITypeInfo::ReleaseTypeAttr()
ITypeInfo::ReleaseVarDesc()
18.2.6    ITypeInfo2
ITypeInfo2::GetTypeKind()
ITypeInfo2::GetTypeFlags()
ITypeInfo2::GetFuncIndexOfMemId()
ITypeInfo2::GetVarIndexOfMemId()
ITypeInfo2::GetCustData()
ITypeInfo2::GetAllCustData()
ITypeInfo2::GetAllFuncCustData()
ITypeInfo2::GetAllImplTypeCustData()
ITypeInfo2::GetAllParamCustData()
ITypeInfo2::GetAllVarCustData()
ITypeInfo2::GetFuncCustData()
ITypeInfo2::GetParamCustData()
ITypeInfo2::GetVarCustData()
ITypeInfo2::GetImplTypeCustData()
ITypeInfo2::GetDocumentation2()
18.2.7    ITypeComp
ITypeComp::Bind()
ITypeComp::BindType()
18.3    Type Library API Descriptions
CreateTypeLib()
LHashValOfName()
LHashValOfNameSys()
LoadTypeLibEx()
LoadRegTypeLib()
RegisterTypeLib()
UnRegisterTypeLib()
QueryPathOfRegTypeLib()
 
19    Automation
19.1    Overview of the IDispatch Interface
19.1.1    Implementing the IDispatch Interface
19.2    Registering the Object
19.3    National Language Support Functions
19.3.1    Overview of Functions
19.3.2    Localized Member Names
19.3.3    Locale Identifier (LCID)
19.3.4    Language Identifier (LANGID)
19.3.5    Locale Constants (LCTYPE)
19.4    Automation Interface Descriptions
19.4.1    IDispatch
IDispatch::GetIDsOfNames()
IDispatch::GetTypeInfo()
IDispatch::GetTypeInfoCount()
IDispatch::Invoke()
19.4.2    ICreateTypeInfo Interface
ICreateTypeInfo::AddFuncDesc()
ICreateTypeInfo::AddImplType()
ICreateTypeInfo::AddRefTypeInfo()
ICreateTypeInfo::AddVarDesc()
ICreateTypeInfo::DefineFuncAsDllEntry()
ICreateTypeInfo::LayOut()
ICreateTypeInfo::SetAlignment()
ICreateTypeInfo::SetDocString()
ICreateTypeInfo::SetFuncAndParamNames()
ICreateTypeInfo::SetFuncDocString()
ICreateTypeInfo::SetFuncHelpContext()
ICreateTypeInfo::SetGuid()
ICreateTypeInfo::SetHelpContext()
ICreateTypeInfo::SetImplTypeFlags()
ICreateTypeInfo::SetMops()
ICreateTypeInfo::SetTypeDescAlias()
ICreateTypeInfo::SetTypeFlags()
ICreateTypeInfo::SetVarDocString()
ICreateTypeInfo::SetVarHelpContext()
ICreateTypeInfo::SetVarName()
ICreateTypeInfo::SetVersion()
19.4.3    ICreateTypeInfo2 Interface
19.4.3.1    Examples
ICreateTypeInfo2::SetName()
ICreateTypeInfo2::DeleteFuncDesc()
ICreateTypeInfo2::DeleteFuncDescByMemId()
ICreateTypeInfo2::DeleteVarDesc()
ICreateTypeInfo2::DeleteVarDescByMemId()
ICreateTypeInfo2::DeleteImplType()
ICreateTypeInfo2::SetCustData()
ICreateTypeInfo2::SetHelpStringContext()
ICreateTypeInfo2::SetFuncCustData()
ICreateTypeInfo2::SetFuncHelpStringContext()
ICreateTypeInfo2::SetVarCustData()
ICreateTypeInfo2::SetParamCustData()
ICreateTypeInfo2::SetImplTypeCustData()
ICreateTypeInfo2::SetVarHelpStringContext()
19.4.4    ICreateTypeLib Interface
ICreateTypeLib::CreateTypeInfo()
ICreateTypeLib::SaveAllChanges()
ICreateTypeLib::SetDocString()
ICreateTypeLib::SetGuid()
ICreateTypeLib::SetHelpContext()
ICreateTypeLib::SetHelpFileName()
ICreateTypeLib::SetLibFlags()
ICreateTypeLib::SetLcid()
ICreateTypeLib::SetName()
ICreateTypeLib::SetVersion()
19.4.5    ICreateTypeLib2 Interface
19.4.5.1    Examples
ICreateTypeLib2::SetName()
ICreateTypeLib2::DeleteTypeInfo()
ICreateTypeLib2::SetCustData()
ICreateTypeLib2::SetHelpStringContext()
ICreateTypeLib2::SetHelpStringDll()
19.5    Automation API Descriptions
BstrFromVector()
CreateDispTypeInfo()
CreateStdDispatch()
DispGetIDsOfNames()
DispGetParam()
DispInvoke()
DosDateTimeToVariantTime()
GetActiveObject()
RegisterActiveObject()
RevokeActiveObject()
CompareString()
LCMapString()
GetLocaleInfo()
GetStringType()
GetSystemDefaultLangID()
GetSystemDefaultLCID()
GetUserDefaultLangID()
GetUserDefaultLCID()
SafeArrayAccessData()
SafeArrayAllocData()
SafeArrayAllocDescriptor()
SafeArrayCopy()
SafeArrayCopyData()
SafeArrayCreate()
SafeArrayCreateVector()
SafeArrayDestroy()
SafeArrayDestroyData()
SafeArrayDestroyDescriptor()
SafeArrayGetDim()
SafeArrayGetElement()
SafeArrayGetElemsize()
SafeArrayGetLBound()
SafeArrayGetUBound()
SafeArrayLock()
SafeArrayPtrOfIndex()
SafeArrayPutElement()
SafeArrayRedim()
SafeArrayUnaccessData()
SafeArrayUnlock()
SysAllocString()
SysAllocStringByteLen()
SysAllocStringLen()
SysFreeString()
SysReAllocString()
SysReAllocStringLen()
SysStringByteLen()
SysStringLen()
SystemTimeToVariantTime()
VariantChangeType()
VariantChangeTypeEx()
VariantClear()
VariantCopy()
VariantCopyInd()
VariantInit()
VariantTimeToDosDateTime()
VariantTimeToSystemTime()
VarNumFromParseNum()
VarParseNumFromStr()
VectorFromBstr()
19.6    Automation Related Structure Definitions
19.6.1    NUMPARSE
19.6.2    SAFEARRAY
19.6.3    SAFEARRAYBOUND
 
20    Support for Remote Debugging
20.1    Implementation
DllDebugObjectRPCHook()
20.2    Architectural Overview
20.3    Calling Convention for Notifications
20.4    Notifications
DebugORPCClientGetBufferSize()
DebugORPCClientFillBuffer()
DebugORPCServerNotify()
DebugORPCServerGetBufferSize()
DebugORPCServerFillBuffer()
DebugORPCClientNotify()
20.5    Special Segments
20.6    Registry specific information
20.7    Format of Debug Information
 
Part 3 -- Component Object Model Protocols and Services
 
21    Interface Definition Language
21.1    Object RPC IDL Extensions
21.1.1    ODL Extensions
21.1.2    `Object' Interface Attribute
21.1.3    Interface Name as a Type
21.1.4    No handle_t Required
21.1.5    Interface Inheritance
21.1.6    iid_is and Use of void*
21.1.7    All Methods Must Return void or HRESULT
21.1.8    The wire_marshal Attribute
21.1.9    The user_marshal Attribute
21.1.10    User Supplied Routines
21.1.10.1    _UserSize
21.1.10.2    _UserMarshal
21.1.10.3    _UserUnmarshal
21.1.10.4    _UserFree
21.1.11    The Library Keyword
21.2    Mapping from ORPC IDL to DCE RPC IDL
21.2.1    An Example
21.2.1.1    Object RPC Style
21.2.1.2    DCE Style
 
22    Component Object Model Protocol
22.1    Purpose
22.1.1    Data Marshaling
22.1.2    Security
22.1.3    Safe Non-Coordinated Versioning of Interfaces
22.2    Overall Operation
22.2.1    Object Calls
22.2.2    OXIDs and Object Exporters
22.2.3    Marshaled Interface References
22.2.4    Reference Counting
22.2.5    Pinging
22.2.5.1    Delta Pinging
22.2.6    QueryInterface
22.2.7    Causality ID
22.3    Data Types and Structures
22.3.1    DCE Packet Headers
22.3.2    ORPC Base Definitions
22.3.3    OBJREF
22.3.3.1    OBJREF_STANDARD
22.3.3.2    OBJREF_HANDLER
22.3.3.3    OBJREF_CUSTOM
22.3.4    STDOBJREF
22.3.5    SORFLAGS
22.3.6    ORPCINFOFLAGS
22.3.7    ORPCTHIS
22.3.8    ORPCTHAT
22.3.9    HRESULTs
22.3.10    Body Extensions
22.3.10.1    Debugging Extension
22.3.10.2    Extended Error Extension
22.4    IRemUnknown interface
22.4.1    IRemUnknown::RemQueryInterface
22.4.1.1    REMQIRESULT
22.4.2    IRemUnknown::RemAddRef
22.4.2.1    REMINTERFACEREF
22.4.3    IRemUnknown::RemRelease
22.5    The OXID Resolver
22.5.1    OXID Resolver Ports/Endpoints
22.5.2    The IOXIDResolver Interface
22.5.2.1    IOXIDResolver::ResolveOxid
22.5.2.1.1    Lookup Between Friends
22.5.2.1.2    Lazy Protocol Registration
22.5.2.2    IOXIDResolver::SimplePing
22.5.2.3    IOXIDResolver::ComplexPing
22.6    Wrapping DCE RPC calls to Interoperate with ORPC
22.6.1    Implementing ORPC in RPC
 
Part 4 -- Other ActiveX Core Technologies
 
23    MSRPC
 
24    Registry
24.1    Structure of the Registry
24.2    Registry Storage Space
24.3    Predefined Keys
24.4    Opening, Creating, and Closing Keys
24.5    Writing and Deleting Registry Data
24.6    Retrieving Data from the Registry
24.7    Registry Files
24.8    The Registry API Descriptions
RegCloseKey()
RegConnectRegistry()
RegCreateKeyEx()
RegDeleteKey()
RegDeleteValue()
RegEnumKeyEx()
RegEnumValue()
RegFlushKey()
RegGetKeySecurity()
RegLoadKey()
RegNotifyChangeKeyValue()
RegOpenKeyEx()
RegQueryInfoKey()
RegQueryMultipleValues()
RegQueryValueEx()
RegReplaceKey()
RegRestoreKey()
RegSaveKey()
RegSetKeySecurity()
RegSetValueEx()
RegUnLoadKey()
24.9    Registry Structures
24.9.1    VALENT
 
25    Security Support Provider Interface
25.1    Security Package Capabilities
25.2    Initializing the Security Provider
25.2.1    Initializing the SSPI
25.3    Loading the Security Provider DLL
25.4    Provider Initialization
25.5    Security Function Table
25.5.1    Memory Use, Security Buffers, and Descriptor
25.6    Establishing an Authenticated Connection
25.6.1    Client Context Initialization
25.6.2    Server Context Initialization
25.6.3    Client Continuation
25.6.4    Server Continuation
25.7    Secure Message Exchange
25.7.1    Sender
25.7.2    Receiver
25.7.3    Impersonation
25.7.4    Using Delegation in Kerberos
25.7.5    Security Context Details
25.7.5.1    Connection-Oriented Contexts
25.7.5.2    Datagram Contexts
25.7.5.3    Stream Contexts
25.7.5.4    Context Requirements
25.8    Datatype Descriptions
25.8.1    BINDPTR
25.8.2    BOOL
25.8.3    BSTR
25.8.4    BYTE
25.8.5    CLIPFORMAT
25.8.6    CONST
25.8.7    CUSTDATA
25.8.8    DISPID
25.8.9    DISPPARAMS
25.8.10    DWORD
25.8.11    FAR *
25.8.12    FUNCDESC
25.8.13    HANDLE
25.8.14    HBITMAP
25.8.15    HENHMETAFILE
25.8.16    HGLOBAL
25.8.17    HINSTANCE
25.8.18    HKEY
25.8.19    HMETAFILEPICT
25.8.20    HREFTYPE
25.8.21    HTASK
25.8.22    HUGEP
25.8.23    INVOKEKIND
25.8.24    IPID
25.8.25    LANGID
25.8.26    LCID
25.8.27    LCTYPE
25.8.28    LONG
25.8.29    LPBC
25.8.30    LPBYTE
25.8.31    LPCLSID
25.8.32    LPCOLESTR
25.8.33    LPCTSTR
25.8.34    LPCWSTR
25.8.35    LPDWORD
25.8.36    LPIID
25.8.37    LPMALLOC
25.8.38    LPMALLOCSPY
25.8.39    LPMARSHAL
25.8.40    LPMONIKER
25.8.41    LPOLESTR
25.8.42    LPRUNNINGOBJECTTABLE
25.8.43    LPSECURITY_ATTRIBUTES
25.8.44    LPSTR
25.8.45    LPSTREAM
25.8.46    LPUNKNOWN
25.8.47    LPVOID
25.8.48    LPWORD
25.8.49    LPWSTR
25.8.50    MEMBERID
25.8.51    OLECHAR
25.8.52    PFILETIME
25.8.53    PHKEY
25.8.54    PROPID
25.8.55    PROPSPEC
25.8.55.1    Members
25.8.55.2    Remarks
25.8.56    PROPVARIANT
25.8.56.1    Remarks
25.8.57    PSECURITY_DESCRIPTOR
25.8.58    PULONG
25.8.59    PVALENT
25.8.60    PVOID
25.8.61    PWCHAR
25.8.62    REFCLSID
25.8.63    REFFMTID
25.8.64    REFGUID
25.8.65    REFIID
25.8.66    REGKIND
25.8.67    REGSAM
25.8.68    RPC_AUTH_IDENTITY_HANDLE
25.8.69    RPC_AUTHZ_HANDLE
25.8.70    RPC_FAR
25.8.71    RPCOLEMESSAGE
25.8.72    SECURITY_INFORMATION
25.8.73    SIZEL
25.8.74    SOLE_AUTHENTICATION_SERVICE
25.8.74.1    Members
25.8.75    STDAPI
25.8.76    SYSKIND
25.8.77    SYSTEMTIME
25.8.78    TLIBATTR
25.8.79    TYPEATTR
25.8.80    UINT
25.8.81    ULARGE_INTEGER
25.8.81.1    Members
25.8.82    ULONG
25.8.83    USHORT
25.8.84    VARDESC
25.8.85    VARIANT and VARIANTARG
25.8.86    VARTYPE
25.8.87    VOID
25.8.88    WCHAR
25.8.89    WINAPI
25.8.90    WINOLEAPI
25.8.91    WORD
 
A    Header Files and Libraries
 
B    Bibliography
 
C    Document Revision History
 
ACTIVEX GLOSSARY
 
Figures
1-1    COM Client and Object Communicate Directly
2-1    Traditional System Service API Communication Paradigm
2-2    COM Client and Object Communicate Directly
3-1    An Object that Supports Three Interfaces
3-2    Interfaces Extend towards Clients Connected to Them
3-3    Two Applications May Connect to Each Other's Objects
3-4    The IUnknown Interface Extends from the Top of Objects
3-5    Interface Negotiation
3-6    An Interface Pointer
3-7    Rrepresentation of Function Tables
3-8    Clients Use, and Objects are Called by, In-Process Code
3-9    Locating and Accessing Objects in COM
3-10    A COM Client Creates Objects through a Class Factory
3-11    General Structure of a COM Server
3-12    Transparent Access through Proxy and Stub Objects
3-13    Components of COM's Distributed Architecture
3-14    The SCM Loads and Launches Servers
3-15    Security by Configuration
3-16    Per-Interface Security Using Registry Keys
3-17    Containment of an Inner Object and Delegation to its Interfaces
3-18    Aggregation of an Inner Object
3-19    A Flat-File Structure for a Diary Application
3-20    A Structured Storage Scheme for a Diary Application
3-21    A Composite Moniker
3-22    An Object Implemented with the IAdviseSink Interface
4-1    The Interface Structure
4-2    Object Data Placement
4-3    In-Process Objects are Always Used
4-4    Category 1: Nested Lifetimes
4-5    Category 2: Staggered Overlapping Lifetimes
4-6    Recommended Backpointer Design
4-7    An Object with IDataObject and IPersistFile Interfaces
8-1    Using Inner Objects through Containment
8-2    Exposing an Inner Object's Interface
8-3    Aggregation Mechanism
9-1    A Client and Server Process
9-2    Establishing the Second Connection
9-3    Simplified Conceptual View of Client-Server Remoting Structures
11-1    NTLM Use of DCOM and Secured RPC
11-2    PAULAS and PAULAD
11-3    Protocol Sequence between Client and Server
11-4    Client to PAULAD
16-1    A Moniker Referring to a Spreadsheet
16-2    Reduction of a Moniker
25-1    NTLM Challenge Response Authentication Protocol via SSPI
 
Tables
4-1    IUnknown Methods in VTable Order
4-2    IProvideClassInfo Methods in VTable Order
4-3    IProvideClassInfo Methods
4-4    IProvideClassInfo2 Methods in VTable Order
4-5    IProvideClassInfo Methods
4-6    IProvideClassInfo2 Methods
5-1    IMalloc Methods in VTable Order
5-2    IMalloc Methods
5-3    IMallocSpy Methods in Vtable Order
5-4    IMallocSpy Methods
5-5    IOleContainer Methods in VTable Order
5-6    IParseDisplayName Method
5-7    IOleContainer Methods
5-8    IPersistMoniker Methods in Vtable Order
5-9    IPersist Method
5-10    IPersistMoniker Methods
5-11    IRunnableObject Methods in VTable Order
5-12    IRunnableObject Methods
6-1    IMessageFilter Methods in VTable Order
6-2    IMessageFilter Methods
7-1    ICatInformation Methods in VTable Order
7-2    ICatInformation Methods
7-3    IMultiQI Methods in VTable Order
7-4    IMultiQI Methods
7-5    COM Use of CLSCTX Values
8-1    ICatRegister Methods in VTable Order
8-2    ICatRegister Methods
8-3    IClassFactory Methods in VTable Order
8-4    IClassFactory Methods
8-5    IClassFactory2 Methods in VTable Order
8-6    IClassFactory Methods
8-7    IClassFactory2 Methods
8-8    IExternalConnection Methods in VTable Order
8-9    IExternalConnection Methods
8-10    Allowable REGCLS Combinations
9-1    IMarshal Methods in VTable Order
9-2    IMarshal Methods
9-3    Interpretation of dataPresentation
9-4    IStdMarshalInfo Methods in VTable Order
9-5    IStdMarshalInfo Methods
10-1    IClientSecurity Methods in VTable Order
10-2    IClientSecurity Methods
10-3    IServerSecurity Methods in VTable Order
10-4    IServerSecurity Methods
10-5    Default NTLMSSP Authentication Settings
11-1    Response Message Notation Key
12-1    IErrorInfo Elements
12-2    ICreateErrorInfo Elements
12-3    ISupportErrorInfo Elements
12-4    HRESULT Facility Codes
12-5    IErrorLog Methods in Vtable Order
12-6    IErrorLog Methods
15-1    String Property Names
15-2    Security Levels
15-3    FMTID String Names
15-4    ILockBytes Methods in VTable Order
15-5    ILockBytes Methods
15-6    IPersist Methods in VTable Order
15-7    IPersist Methods
15-8    IPersistFile Methods in VTable Order
15-9    IPersist Methods
15-10    IPersistFile Methods
15-11    IPersistMemory Methods in VTable Order
15-12    IPersist Methods
15-13    IPersistMemory Methods
15-14    IPersistPropertyBag Methods in VTable Order
15-15    IPersist Methods
15-16    IPersistPropertyBag Methods
15-17    IPersistStorage Methods in VTable Order
15-18    IPersist Methods
15-19    IPersistStorage Methods
15-20    IPersistStream Methods in VTable Order
15-21    IPersist Methods
15-22    IPersistStream Methods
15-23    IPersistStreamInit Methods in VTable Order
15-24    IPersistStreamInit Methods
15-25    IPropertyBag Methods in VTable Order
15-26    IPropertyBag Methods
15-27    IPropertySetStorage Methods in VTable Order
15-28    IPropertySetStorage Methods
15-29    IPropertySetStorage Programming Information
15-30    IPropertyStorage Methods in VTable Order
15-31    IPropertyStorage Methods
15-32    IPropertyStorage Programming Information
15-33    IRootStorage Methods in VTable Order
15-34    IRootStorage Methods
15-35    IStorage Methods in VTable Order
15-36    IStorage Methods
15-37    IStream Read and Seek Asynchronous Behavior
15-38    IStream Methods in VTable Order
15-39    IStream Methods
15-40    PROPSETFLAG Programming Information
15-41    STGM Values
16-1    IBindCtx Methods in VTable Order
16-2    IBindCtx Methods
16-3    IClassActivator Methods in VTable Order
16-4    IClassActivator Methods
16-5    IMoniker Methods in VTable Order
16-6    IPersist Methods
16-7    IPersistStream Methods
16-8    IMoniker Methods
16-9    IOleItemContainer Methods in VTable Order
16-10    IParseDisplayName Methods
16-11    IOleContainer Methods
16-12    IOleItemContainer Methods
16-13    IParseDisplayName Methods in VTable Order
16-14    IParseDisplayName Method
16-15    IROTData Methods in VTable Order
16-16    IROTData Method
16-17    IRunningObjectTable Methods in VTable Order
16-18    IRunningObjectTable Methods
17-1    FORMATETC Structure Fields
17-2    IAdviseSink Asynchronous Notification Methods
17-3    IAdviseSink Methods in Vtable Order
17-4    IAdviseSink Methods
17-5    IDataAdviseHolder Methods in VTable Order
17-6    IDataAdviseHolder Methods
17-7    IDataObject Methods in VTable Order
17-8    IDataObject Methods
18-1    Type Description Interface Elements
18-2    Type Description Forms
18-3    IProvideClassInfo Elements
18-4    ITypeComp Elements
19-1    IDispatch Member Functions
19-2    IDispatch Elements
19-3    NLS Functions
19-4    Primary and Sublanguage ID Special Combinations
19-5    Primary LANGIDs
19-6    Sublanguage IDs Supported by Automation
19-7    Supported LCTYPES
19-8    Equivalence beteen LCTYPE Values and Win.ini [intl] Information
20-1    Semantic Specific Information
20-2    Existing Opcodes
20-3    General Semantic Extents
21-1    pFlags Layout
22-1    OBJREF_STANDARD Members
22-2    OBJREF_HANDLER Members
22-3    OBJREF_CUSTOM Members
22-4    STDOBJREF Members
22-5    SORFLAGS Meanings
22-6    ORPCINFOFLAGS Meanings
22-7    ORPCTHIS Members
22-8    ORPCTHAT Members
22-9    Defined HRESULTs
22-10    HRESULT Facility Fields
22-11    IRemUnknown::RemQueryInterface Arguments
22-12    IRemUnknown::RemQueryInterface Return Values
22-13    REMQIRESULT Members
22-14    IRemUnknown::RemAddRef Arguments
22-15    IRemUnknown::RemAddRef Return Values
22-16    REMINTERFACEREF Members
22-17    IRemUnknown::RemRelease Arguments
22-18    IRemUnknown::RemRelease Return Values
22-19    OXID Resolver Protocol String Names
22-20    IOXIDResolver::ResolveOxid Arguments
22-21    IOXIDResolver::ResolveOxid Return Values
22-22    IOXIDResolver::SimplePing Arguments
22-23    IOXIDResolver::SimplePing Return Values
22-24    IOXIDResolver::ComplexPing Arguments
22-25    IOXIDResolver::ComplexPing Return Values
24-1    Registry Entry Points
24-2    VALENT ve_type Values
25-1    Security Contexts
25-2    Buffer Lists
25-3    Buffer List after Successful Return
25-4    Context Requirements
25-5    Sublanguages Using the Latin 1 Script
25-6    Sublanguages Using Latin 2 Script
25-7    Sublanguages and Locales Using Cyrillic Script
25-8    Sublanguages and Locales Using Other Script
25-9    Special Identifiers
25-10    LCTYPE Values
25-11    LOCALE_ILZERO Values
25-12    LCTYPE Values (continued)
25-13    LOCALE_INEGNUMBER Values
25-14    LCTYPE Values (continued)
25-15    LOCALE_ICURRENCY Values
25-16    LCTYPE Values (continued)
25-17    LOCALE_INEGCURR Values
25-18    LCTYPE Values (continued)
25-19    LOCALE_IDATE Values
25-20    LCTYPE Values (continued)
25-21    LOCALE_ILDATE Values
25-22    LCTYPE Values (continued)
25-23    LOCALE_ITIME Values
25-24    LCTYPE Values (continued)
25-25    LOCALE_ICENTURY Values
25-26    LCTYPE Values (continued)
25-27    LOCALE_ITLZERO Values
25-28    LCTYPE Values (continued)
25-29    LOCALE_IDAYLZERO Values
25-30    LCTYPE Values (continued)
25-31    LOCALE_IMONLZERO Values
25-32    LCTYPE Values (continued)
25-33    LOCALE_S1159 Values
25-34    LCTYPE Values (continued)
25-35    LOCALE_IOPTIONALCALENDAR Values
25-36    LCTYPE Values (continued)
25-37    LOCALE_IFIRSTDAYOFWEEK Values
25-38    LCTYPE Values (continued)
25-39    LOCALE_IFIRSTWEEKOFYEAR Values
25-40    LCTYPE Values (continued)
25-41    LOCALE_IPOSSIGNPOSN Values
25-42    LCTYPE Values (continued)
25-43    MEMBERID Format
25-44    PROPVARIANT Types
25-45    Clipboard Format Identifiers
25-46    REGKIND Values
25-47    Security Information Bit Flags
25-48    SYSKIND Values
25-49    tagVARIANT vt Values
A-1    Header Files and Libraries
 
Index