Sailing the Seven C’s with a Campus IT Project: A Voyage of Epic Proportions
COM A Slideshow of Epic Proportions
description
Transcript of COM A Slideshow of Epic Proportions
![Page 1: COM A Slideshow of Epic Proportions](https://reader036.fdocuments.us/reader036/viewer/2022062301/56814596550346895db28727/html5/thumbnails/1.jpg)
COMA Slideshow of Epic Proportions
Sean Baxterhttp://www.eburg.com/~baxters/
![Page 2: COM A Slideshow of Epic Proportions](https://reader036.fdocuments.us/reader036/viewer/2022062301/56814596550346895db28727/html5/thumbnails/2.jpg)
What is COM?
• A standard for interoperable software
• A runtime library providing low-level or hard-to-implement functionality
• A competitive, capitalist marketplace for selling functionality to application developers
• An endless source of healthy obfuscation
![Page 3: COM A Slideshow of Epic Proportions](https://reader036.fdocuments.us/reader036/viewer/2022062301/56814596550346895db28727/html5/thumbnails/3.jpg)
That Last Slide Was Pulled From Booboo’s Rear End. What is COM, Really?
• A sacred covenant held by the world’s best developers. All software functionality is encapsulated through a COM class (coclass) and exposed through COM interfaces
Blah Blah BlahBlah Blah BlahBlah Blah Blah
Booboo
Mooooo
![Page 4: COM A Slideshow of Epic Proportions](https://reader036.fdocuments.us/reader036/viewer/2022062301/56814596550346895db28727/html5/thumbnails/4.jpg)
Interface and Coclass Fundamentals• An interface is a group of methods
• A coclass is a group of interfaces
• All coclasses implement the IUnknown interface
• All other interfaces derive IUnknown
• Lollipop diagrams describe coclassesIUnknown
O inkIFoo
IBar
![Page 5: COM A Slideshow of Epic Proportions](https://reader036.fdocuments.us/reader036/viewer/2022062301/56814596550346895db28727/html5/thumbnails/5.jpg)
About Interfaces• The client communicates with the server through
interface pointers (think base class pointers)• Methods implemented by the coclass are invoked
through interface pointers• Interface pointers are acquired through IUnknown• Because all interfaces derive IUnknown, any
interface pointer on an object can be acquired through any other interface pointer on the object
• The method to acquire an interface pointer is IUnknown::QueryInterface (think dynamic_cast)
![Page 6: COM A Slideshow of Epic Proportions](https://reader036.fdocuments.us/reader036/viewer/2022062301/56814596550346895db28727/html5/thumbnails/6.jpg)
More About Interfaces• Interfaces are equivalent to C++ abstract
base classes
• Because there is no standard thunk mechanism, interfaces do not support multiple inheritance
• Two IUnknown pointers point to the same object if their values are equal
• “Dispatch interfaces” are special case interfaces allowed by the COM Specification
![Page 7: COM A Slideshow of Epic Proportions](https://reader036.fdocuments.us/reader036/viewer/2022062301/56814596550346895db28727/html5/thumbnails/7.jpg)
Interfaces and Virtual Tables
• An interface pointer points to the corresponding slice of a COM object
• The first 4 bytes of this slice comprise a pointer to the interface’s virtual table
• Each slot in this virtual table is the address of an interface method
• A method implementation may be referenced by more than one vtbl entry
![Page 8: COM A Slideshow of Epic Proportions](https://reader036.fdocuments.us/reader036/viewer/2022062301/56814596550346895db28727/html5/thumbnails/8.jpg)
pAddRef
pRelease
pFooFunc1
pFooFunc2
pFooFunc3
pQueryInterface
pAddRef
pRelease
pBarFunc1
pBarFunc2
pBarFunc3
pQueryInterface
pAddRef
pRelease
pQueryInterfaceIUnknown
O ink
IFoo
IBar
m _pU nkV tb l
m _pFooV tb l
m _pB arV tb l
Q ueryInterface()
AddRef()
Release()
FooFunc1()
FooFunc2()
FooFunc3()
BarFunc1()
BarFunc2()
BarFunc3()
Interface Method Indirection
![Page 9: COM A Slideshow of Epic Proportions](https://reader036.fdocuments.us/reader036/viewer/2022062301/56814596550346895db28727/html5/thumbnails/9.jpg)
Reference Counting
• To regulate destruction of objects, COM requires that all coclasses implement a reference counter
• COM objects can have their methods invoked from other threads, processes, and even machines. Reference Counting eliminates a number of problems associated with synchronization
![Page 10: COM A Slideshow of Epic Proportions](https://reader036.fdocuments.us/reader036/viewer/2022062301/56814596550346895db28727/html5/thumbnails/10.jpg)
Reference Counting Rules
• Each object is given a reference count of 1 upon instantiation
• IUnknown::AddRef increments the reference count
• A successful IUnknown::QueryInterface call increments the reference count
• IUnknown::Release decrements the reference count
• When the reference count is decremented to zero, the object destroys itself
![Page 11: COM A Slideshow of Epic Proportions](https://reader036.fdocuments.us/reader036/viewer/2022062301/56814596550346895db28727/html5/thumbnails/11.jpg)
So Why All These Interface and Reference Counting Formalities?
• One of the most amazing features of COM objects is location transparency: COM marshals interfaces between processes and remote computers
• Reference counting guarantees that a client cannot prematurely destroy a shared object
• COM is language transparent: unsophisticated languages like Visual Basic, VBA, J-Script, and VB-Script would not otherwise be able to properly delete objects
![Page 12: COM A Slideshow of Epic Proportions](https://reader036.fdocuments.us/reader036/viewer/2022062301/56814596550346895db28727/html5/thumbnails/12.jpg)
Speaking of Location Transparency...
• COM objects (servers) can be delivered in two module types: EXEs or DLLs (aka OCXs)
• EXEs cannot run in-process
• DLLs can only run in-process
• A “surrogate” EXE can load a DLL to make it an out-of-process server
![Page 13: COM A Slideshow of Epic Proportions](https://reader036.fdocuments.us/reader036/viewer/2022062301/56814596550346895db28727/html5/thumbnails/13.jpg)
An In-process Server (same apartment)
IU nknown
Foo
IFoo
pAddRef
pRelease
pShake
pRattle
pRoll
pQueryInterface
pAddRef
pRelease
pQueryInterface
m _pU nkV tb l
m _pF ooV tb l
Q ueryInterface()
AddRef()
Release()
Shake()
Rattle()
Roll()
![Page 14: COM A Slideshow of Epic Proportions](https://reader036.fdocuments.us/reader036/viewer/2022062301/56814596550346895db28727/html5/thumbnails/14.jpg)
In-process Server(different apartment)
S TA
COM Invisible W indow
IU nknown
O ink_Stub
IFoo
IBarIU nknown
O ink
IFoo
IBar
IU nknown
O ink_Proxy
IFoo
IBar
Client Code
S TA
![Page 15: COM A Slideshow of Epic Proportions](https://reader036.fdocuments.us/reader036/viewer/2022062301/56814596550346895db28727/html5/thumbnails/15.jpg)
Local Server
IU nknown
Foo_P roxy
IFoo
pAddRef_Proxy
pRelease_Proxy
pShake_Proxy
pRattle_Proxy
pRoll_Proxy
pQueryInterface_Proxy
pAddRef_Proxy
pRelease_Proxy
pQueryInterface_Proxy
m _pU nkV tb l
m _pF ooV tb l
Q ueryIn te rface_P roxy()
A ddR e f_P roxy()
R e lease_P roxy()
S hake_P roxy()
R a ttle_P roxy()
R o ll_P roxy()
Q ueryIn te rface_S tub()
S hake_S tub()
R a ttle_S tub()
R o ll_S tub ()
P rocessB oundary
IFoo
IU nknown
Foo
m _pU nkV tb l
m _pF ooV tb l
IPC
![Page 16: COM A Slideshow of Epic Proportions](https://reader036.fdocuments.us/reader036/viewer/2022062301/56814596550346895db28727/html5/thumbnails/16.jpg)
Remote Server
IU nknown
Foo_P roxy
IFoo
pAddRef_Proxy
pRelease_Proxy
pShake_Proxy
pRattle_Proxy
pRoll_Proxy
pQueryInterface_Proxy
pAddRef_Proxy
pRelease_Proxy
pQueryInterface_Proxy
m _pU nkV tb l
m _pF ooV tb l
Q ueryIn te rface_P roxy()
A ddR e f_P roxy()
R e lease_P roxy()
S hake_P roxy()
R a ttle_P roxy()
R o ll_P roxy()
Q ueryIn te rface_S tub()
S hake_S tub()
R a ttle_S tub()
R o ll_S tub ()
IFoo
IU nknown
Foo
m _pU nkV tb l
m _pF ooV tb l
C lien tM ach ine
S erverM ach ine
MS-RPC
![Page 17: COM A Slideshow of Epic Proportions](https://reader036.fdocuments.us/reader036/viewer/2022062301/56814596550346895db28727/html5/thumbnails/17.jpg)
Things To Note• All interface method calls are synchronous; a
remote call to a New York server must complete its round-trip before the client can continue execution
• Asynchronous services are available through Microsoft Message Queue (MSMQ) and ICallFactory (Windows 2000)
• Encryption, authentication, and impersonation services are available with remote server connections (at least on NT)
![Page 18: COM A Slideshow of Epic Proportions](https://reader036.fdocuments.us/reader036/viewer/2022062301/56814596550346895db28727/html5/thumbnails/18.jpg)
Confused?
Where Am I?
The Guy In The Back Row
![Page 19: COM A Slideshow of Epic Proportions](https://reader036.fdocuments.us/reader036/viewer/2022062301/56814596550346895db28727/html5/thumbnails/19.jpg)
COM Owns You
So what does all this nonsense about location transparency and reference counting have to do with anything?
Ever heard of OLE? Ever heard of ActiveX? You may suspect that these have something to do with COM...
![Page 20: COM A Slideshow of Epic Proportions](https://reader036.fdocuments.us/reader036/viewer/2022062301/56814596550346895db28727/html5/thumbnails/20.jpg)
WRONG!
They are COM.
All will soon be clear
![Page 21: COM A Slideshow of Epic Proportions](https://reader036.fdocuments.us/reader036/viewer/2022062301/56814596550346895db28727/html5/thumbnails/21.jpg)
MS Marketecture:Common Misperceptions
• OLE is a system of linking and embedding data into a document (hence the acronym “Object Link and Embedding”)
• ActiveX, like Java, is a system for building web page applets
• Microsoft Transaction Server (MTS) processes business data from the internet
Faery Tales!
![Page 22: COM A Slideshow of Epic Proportions](https://reader036.fdocuments.us/reader036/viewer/2022062301/56814596550346895db28727/html5/thumbnails/22.jpg)
The Journey of COM
• Dynamic Data Exchange (DDE) was introduced while the Earth was still cooling.
• DDE was unsavory. MS unveils OLE 1.0 after the villagers riot
• OLE 1.0 is a big success but hard to program. MS unveils OLE 2.0 for Windows 3.1: COM is born (it’s 16bit)
• Windows NT 3.5 is blessed with OLE (look ma - no version number!) and true 32bit COM. OLE is now “Olè,” which is synonymous with COM
![Page 23: COM A Slideshow of Epic Proportions](https://reader036.fdocuments.us/reader036/viewer/2022062301/56814596550346895db28727/html5/thumbnails/23.jpg)
The Journey of COM (II)
• To celebrate Windows 95, MS blesses COM with the apartment model
• 1996 sees Windows NT 4. DCOM brings network and multithreading enhancements to COM
• Microsoft Transaction Server (MTS) becomes available for NT Server. This doesn’t process web business data. It’s a COM runtime environment which allows components to run more efficiently (solving scalability difficulties often faced in processing business data)
![Page 24: COM A Slideshow of Epic Proportions](https://reader036.fdocuments.us/reader036/viewer/2022062301/56814596550346895db28727/html5/thumbnails/24.jpg)
The Journey of COM (III)
• OLE-DB provides consistency when accessing data from a variety of providers
• MS makes web browsers a priority (IE3) and simultaneously coins the term “ActiveX,” adding to the COM marketecture. Like OLE, ActiveX is a synonym for COM.
• Microsoft Message Queue (MSMQ) delivers asynchronous (and vastly more reliable) method calls
• Visual C++ 5.0 ships with ATL 2.1. OLE Control creation has never been so easy!
![Page 25: COM A Slideshow of Epic Proportions](https://reader036.fdocuments.us/reader036/viewer/2022062301/56814596550346895db28727/html5/thumbnails/25.jpg)
The Journey of COM (IV)• Windows 2000 ships in 2004. Microsoft introduces
COM+ acronym: COM+ is simply COM on Win2k• Win2k includes many COM updates including a third
threading model (the Neutral Threaded Apartment) and integration of MTS into the COM runtimes
• COM+ 2.0 delivers legendary COM virtual machine• Windows NT 6 device contexts replaced by
DirectDraw surfaces. Classic OLE Control interfaces deprecated for new, ultra-spiffy interfaces
![Page 26: COM A Slideshow of Epic Proportions](https://reader036.fdocuments.us/reader036/viewer/2022062301/56814596550346895db28727/html5/thumbnails/26.jpg)
COMprehension
• COM is a set of many, many technologies.
• COM is really Microsoft’s software engineering strategy
• Computer people (you) are betting the bank on Microsoft
• Microsoft is betting the bank on COM
• COM Owns You
![Page 27: COM A Slideshow of Epic Proportions](https://reader036.fdocuments.us/reader036/viewer/2022062301/56814596550346895db28727/html5/thumbnails/27.jpg)
COM Defined
A single sentence can’t define COM, because COM is such a monumental and omnipresent set of technologies.
So what is a COM technology? Any software creation that leverages interfaces and coclasses, as described in the earlier slides.
![Page 28: COM A Slideshow of Epic Proportions](https://reader036.fdocuments.us/reader036/viewer/2022062301/56814596550346895db28727/html5/thumbnails/28.jpg)
COM in Everyday Life
The Month View is from the Microsoft Windows CommonControls-2 6.0 controls library
![Page 29: COM A Slideshow of Epic Proportions](https://reader036.fdocuments.us/reader036/viewer/2022062301/56814596550346895db28727/html5/thumbnails/29.jpg)
Property Pages
How does Visual Basic know which properties to put in the box?
![Page 30: COM A Slideshow of Epic Proportions](https://reader036.fdocuments.us/reader036/viewer/2022062301/56814596550346895db28727/html5/thumbnails/30.jpg)
Events
How does Visual Basic know which events the control exposes?
![Page 31: COM A Slideshow of Epic Proportions](https://reader036.fdocuments.us/reader036/viewer/2022062301/56814596550346895db28727/html5/thumbnails/31.jpg)
What is a VB Control?
![Page 32: COM A Slideshow of Epic Proportions](https://reader036.fdocuments.us/reader036/viewer/2022062301/56814596550346895db28727/html5/thumbnails/32.jpg)
What Functionality Does It Expose?
![Page 33: COM A Slideshow of Epic Proportions](https://reader036.fdocuments.us/reader036/viewer/2022062301/56814596550346895db28727/html5/thumbnails/33.jpg)
Properties and Methods
![Page 34: COM A Slideshow of Epic Proportions](https://reader036.fdocuments.us/reader036/viewer/2022062301/56814596550346895db28727/html5/thumbnails/34.jpg)
The Secret of Property Pages
![Page 35: COM A Slideshow of Epic Proportions](https://reader036.fdocuments.us/reader036/viewer/2022062301/56814596550346895db28727/html5/thumbnails/35.jpg)
Property Page Coclasses
![Page 36: COM A Slideshow of Epic Proportions](https://reader036.fdocuments.us/reader036/viewer/2022062301/56814596550346895db28727/html5/thumbnails/36.jpg)
Property Pages Abound!
![Page 37: COM A Slideshow of Epic Proportions](https://reader036.fdocuments.us/reader036/viewer/2022062301/56814596550346895db28727/html5/thumbnails/37.jpg)
Standard Interfaces• Programming sucks. Best to fall back on
platform-provided functionality
• A container/client can interact with any server/control simply by implementing the required site interfaces
• Application developers who license your components are already familiar with the interfaces
• Standard interfaces can use the Microsoft-provided proxy/stubs
![Page 38: COM A Slideshow of Epic Proportions](https://reader036.fdocuments.us/reader036/viewer/2022062301/56814596550346895db28727/html5/thumbnails/38.jpg)
What Are Some COM-Based Technologies?
• OLE Controls• OLE-DB• ADO• DAO• DirectX• TAPI 3.0• Exchange Server• Exchange Client• Active Scripting
• CDO 2.0• MAPI• SQL-DMO• SQL-NS• Microsoft Repository• Broadcast Architecture• Still Image API• Microsoft Multimedia• Indexing Service
![Page 39: COM A Slideshow of Epic Proportions](https://reader036.fdocuments.us/reader036/viewer/2022062301/56814596550346895db28727/html5/thumbnails/39.jpg)
Still More COM Technologies!• Active Desktop• IIS• Microsoft Agent• Microsoft Java SDK• NetMeeting• NetShow• Microsoft Wallet• Active Directory• Active Accessibility• Clustering Service
• Fax Services• MSMQ• RAS• Synchronization Manager• Structured Storage• MTS• MMC• Windows Shell API• all OLE Applications
![Page 40: COM A Slideshow of Epic Proportions](https://reader036.fdocuments.us/reader036/viewer/2022062301/56814596550346895db28727/html5/thumbnails/40.jpg)
The Glory of COM• COM eliminates thread synchronization and
IPC/RPC confusion• COM enables real polymorphism: language
transparency and location transparency• COM mandates a consistency among
component interfaces to reduce learning curves• COM allows versionless updates• COM is the best component standard: it is by
far the most commercially successful
![Page 41: COM A Slideshow of Epic Proportions](https://reader036.fdocuments.us/reader036/viewer/2022062301/56814596550346895db28727/html5/thumbnails/41.jpg)
DLL Server Mechanisms
• DllRegisterServer and DllUnregisterServer manipulate the registry
• DllCanUnloadNow tells COM when the module is not being used
• DllGetClassObject provides the client with the class factory of the required COM object
![Page 42: COM A Slideshow of Epic Proportions](https://reader036.fdocuments.us/reader036/viewer/2022062301/56814596550346895db28727/html5/thumbnails/42.jpg)
EXE Server Mechanisms
• A /RegServer argument registers the EXE
• A /UnregServer argument un-registers the EXE
• CoRegisterClassObject registers a class factory for clients to connect to
• RegisterActiveObject adds an object to the Running Object Table (ROT)
![Page 43: COM A Slideshow of Epic Proportions](https://reader036.fdocuments.us/reader036/viewer/2022062301/56814596550346895db28727/html5/thumbnails/43.jpg)
COM Object Instantiation
• CoGetClassObject (wrapped by CoCreateInstance and CoCreateInstanceEx) launches a module and retrieves its class factory
• CoGetClassObjectFromURL downloads a module from an URL, decompresses it, registers it, and invokes CoGetClassObject on it
• GetActiveObject loads an object off the ROT
![Page 44: COM A Slideshow of Epic Proportions](https://reader036.fdocuments.us/reader036/viewer/2022062301/56814596550346895db28727/html5/thumbnails/44.jpg)
COM Security
• CoInitializeSecurity sets the authentication requirements for the current process
• The COSERVERINFO structure specifies the machine name and authentication info for clients connecting to remote objects
• CoImpersonateClient allows the server to impersonate the client when accessing other servers
![Page 45: COM A Slideshow of Epic Proportions](https://reader036.fdocuments.us/reader036/viewer/2022062301/56814596550346895db28727/html5/thumbnails/45.jpg)
Books of COMpetency
• The C++ Programming Language (Bjarne Stroustrup)
• Programming Windows (Charles Petzold)
• Advanced Windows (Jeffrey Richter)
• Design Patterns (Gamma, Helm, Johnson, Vlissides)
• Essential COM (Don Box)
![Page 46: COM A Slideshow of Epic Proportions](https://reader036.fdocuments.us/reader036/viewer/2022062301/56814596550346895db28727/html5/thumbnails/46.jpg)
Hoorah For Reading!
• Effective COM (Box, Brown, Ewald, Sells)• Inside OLE (Kraig Brockschmidt)• Professional ATL COM Programming
(Richard Grimes)• Microsoft Systems Journal
(www.microsoft.com/msj)• Sean’s Web Page
(www.eburg.com/~baxters/)
![Page 47: COM A Slideshow of Epic Proportions](https://reader036.fdocuments.us/reader036/viewer/2022062301/56814596550346895db28727/html5/thumbnails/47.jpg)
May the COM Be With You
Thank You