Generated by GPT-5-mini| Microsoft COM | |
|---|---|
| Name | Microsoft COM |
| Other names | Component Object Model |
| Developer | Microsoft |
| Introduced | 1993 |
| Latest release | legacy |
| Genre | Software componentry, binary interface |
Microsoft COM is a binary-interface standard for software components originally developed by Microsoft to enable interprocess communication and dynamic object creation in a language-neutral way. It influenced technologies across Windows NT, Windows 95, Internet Explorer, Visual Basic, and Microsoft Office while interacting with standards from POSIX, DCE, CORBA, and later .NET Framework. The model underpins numerous ActiveX controls, OLE automation servers, and system-level services used by Explorer and other Windows subsystems.
COM provides a language-agnostic, binary contract that lets components produced by different teams, companies, or languages interoperate across process and machine boundaries. It introduced concepts leveraged by Dynamic Data Exchange, Object Linking and Embedding, Component Object Model+, and Distributed Component Object Model to address component reuse in Windows NT-based environments. Major vendors and development tools such as Borland, IBM, Intel, Sun Microsystems (through interoperability efforts), Symantec, and Adobe Systems built or consumed COM components in the 1990s and 2000s.
COM centers on the concept of binary interfaces represented by pointers to virtual method tables (vtables) and uses globally unique identifiers (GUIDs) such as interface IDs (IIDs) and class IDs (CLSIDs). Its architecture includes in-process servers (DLLs), local servers (EXEs), and remote servers via DCOM and RPC-related mechanisms standardized in Microsoft Windows NT and later adapted for Windows 2000 and Windows XP. Core system components like Registry entries store class factory mappings and versioning metadata, while runtime facilities such as COM runtime and Service Control Manager coordinate activation, marshaling, and apartment threading models (STA, MTA).
Developers implement COM by coding classes that expose one or more interfaces inheriting from the base IUnknown interface with methods including AddRef, Release, and QueryInterface. Tools and frameworks such as MIDL compiler, ATL, MFC, Visual Studio, and language-specific wrappers for C++, Delphi, Visual Basic, and C# (via interop) assist in generating proxies, stubs, and type libraries (TLB). Common interface patterns include IDispatch for late binding used by VBScript, JScript, and Microsoft Office automation, and custom interfaces for high-performance native code used in DirectX, Windows Shell Extensions, and Internet Explorer extensions.
COM employs reference counting via IUnknown::AddRef and IUnknown::Release to manage object lifetimes, requiring careful design to avoid cyclic references that lead to leaks; solutions include weak references, manual cycle breaking, or using COM+-style services such as object pooling in COM+ and garbage-collected hosts like the CLR via runtime interop. Threading models (single-threaded apartment, multithreaded apartment) determine concurrency semantics and marshal boundaries enforced by the COM library and RPC runtime. Memory allocation and deallocation across module boundaries commonly uses allocator conventions such as CoTaskMemAlloc/CoTaskMemFree and task memory functions coordinated with the Windows API.
COM's binary ABI enabled language bindings across C++, Visual Basic, Delphi, Pascal, Ada, Python (via extensions), Perl, Java (through JNI bridges), and C# (through COM Interop and Runtime Callable Wrappers). Type libraries and the IDispatch interface facilitate late-bound scripting in hosts like Internet Explorer, Windows Scripting Host, and Microsoft Office macros, while proxy/stub generation via the MIDL compiler and RPC IDL allowed cross-process and cross-machine calls for DCOM scenarios used by Microsoft Exchange, SQL Server, and enterprise middleware. Interop layers integrate with OLE Automation and use registration mechanisms in the Windows Registry or side-by-side (SxS) manifests introduced with Windows Vista.
COM security involves access control, authentication, and impersonation configured through DCOMCNFG, Security Descriptors, and Windows Security APIs; COM leverages RPC authentication levels and authentication services such as NTLM and Kerberos in domain environments administered via Active Directory. Deployment models include registry-based registration (regsvr32), registration-free COM via manifests, and installer technologies like Windows Installer and MSI packages to manage COM DLL/EXE registration, versioning, and side-by-side deployments. Attack surfaces have been exploited via unsafe COM object hosting in Internet Explorer and Office macros, prompting mitigations in Windows Defender and security hardening in Windows 10 and Windows 11.
COM emerged in the early 1990s as part of Microsoft’s strategy for component-based software on Windows 3.1 and Windows NT and was widely promoted alongside OLE and ActiveX for application extensibility. It evolved into DCOM for distributed scenarios and later into COM+ for integration with Transaction Processing and Enterprise Services, before being complemented by the .NET Framework and the Common Language Runtime which provided managed alternatives and interop shims. Modern Windows continues to support COM for system APIs, shell extensions, and legacy integrations while newer component models (such as WinRT and UWP) borrow COM-like ABI ideas to enable language projection and modern app isolation.
Category:Microsoft technologies