| 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 |