Geoff Chappell - Software Analyst
The CBaseBrowser class is one of many that SHDOCVW exposes through its exported DllGetClassObject function. Instances can therefore be created using such well-documented COM functions as CoCreateInstance, by anyone who knows the CLSID:
The CBaseBrowser class can be aggregated.
The CBaseBrowser class implements the following interfaces:
In version 6.0 before Windows Vista, the ITridentService2 interface has IDocObjectService as a base. However, the two have separate virtual function tables later.
The ITridentService3 interface is implemented in the SHDOCVW builds of version 6.0 from Internet Explorer 7 (and 8) for installation on Windows XP or Windows Server 2003, including the later builds for Windows XP SP3 and Windows Server 2003 SP2.
The IOleWindow interface is a base of both IOleInPlaceUIWindow and IShellBrowser: the latter is the one that is picked for discovery through QueryInterface.
The IPersistHistory2 and IPersistHistory interfaces have IPersist as a base, but because its IID is omitted from the table used for QueryInterface, it is not discoverable through COM mechanisms as being implemented by the class. The omission is presumably a coding error, since it breaks COM rules about interface navigation.
Builds of version 6.0 before Windows Vista also implement the IShellBrowserService interface, but may as well not: presumably as a coding oversight, QueryInterface does not know of the implementation, which can therefore never be discovered through COM mechanisms. Curiously, IEFRAME version 7.0 does the same thing with the IIEBrowserService interface which is the IShellBrowserService with a new name and IID but the same methods. Note anyway that this implemented-but-not-disclosed IShellBrowserService interface differs from the one that is a base for IShellBrowserService4 in later builds of version 6.0, and differs yet again from an IShellBrowserService that is implemented in SHELL32 version 6.1.
The CBaseBrowser class is implemented in SHDOCVW version 5.0 to 6.0 and then in IEFRAME version 7.0 only. The change of CLSID allows separate implementations in the two modules concurrently.
IEFRAME version 8.0 has the class but it is not creatable.
Though this class dates from as long ago as 1999, it was still not documented by Microsoft as late as the January 2007 edition of the Windows Vista Software Development Kit (SDK).