Travel Logs

Travel logs were introduced with Internet Explorer 4.00 to model a navigation of potentially many URLs with the thought of sometimes moving backwards and forwards through the set. The travel log is therefore an ordered set of travel entries. One entry is current. Others are some distance forward or backward.


The travel log implementation, named CTravelLog according to Microsoft’s published symbol files, exposes the interfaces:

Travel Entries

Travel entries are creatable only by calling methods of the travel log, specifically AddEntry or InsertEntry (being respectively an original and an improvement), or by calling an existing entry’s Clone method.

Each entry is implemented as an instance of an internal class named CTravelEntry, which exposes the interfaces:

Of the travel log’s other methods that provide access to a selected entry, some produce the entry’s ITravelEntry interface, others the ITravelLogEntry interface.


Travel entries can be enumerated by calling the travel log’s CreateEnumEntry method. This creates an instance of yet another internal class, named CEnumEntry, which exposes the one interface:

Accessing an entry through the enumerator produces the entry’s ITravelLogEntry interface.


Instances are created internally, most notably to support the CBaseBrowser class, and can be obtained by calling the GetTravelLog method of an IBrowserService interface.

However, that way is deprecated, if only for non-Microsoft programmers. Since Internet Explorer 5.50, Microsoft has provided that a browser’s travel log be accessed indirectly, through a public travel log that exposes a reduced but supposedly adequate functionality. This is implemented very much as an extra layer. The GetTravelLog call is still made, but as an internal detail for the browser. To have a browser create a public travel log, query the browser for its SID_STravelLogCursor service.

Starting with Windows Vista, travel logs are creatable using standard COM functions such as CoCreateInstance by anyone who knows the CLSID. Indeed, there are two, since the supporting code has been moved to IEFRAME and SHELL32:

CLSID_TravelLog {34A3D570-67D9-4265-A9EE-8C3FA3DFECCF} IEFRAME
CLSID_ShellTravelLog {D58960BA-2EF3-4910-9E34-C911B1710180} SHELL32


Travel logs are supported in SHDOCVW version 4.71 and higher, until the supporting code was moved to IEFRAME version 7.00 and the Windows Vista build of SHELL32 version 6.00. The original interfaces are ITravelLog and ITravelEntry. The first significant improvement was for version 5.50, which added ITravelLogEx, ITravelLogEntry and IEnumTravelLogEntry. Windows Vista adds ITravelLog2 and ITravelEntry2.

Though ITravelLog and ITravelEntry date from as long ago as 1997, they were still undocumented as late as the January 2004 edition of the MSDN Library on CD. They have got documented since, albeit as being deprecated. None of ITravelLogEx, ITravelLog2, ITravelEntry2 are documented in the January 2007 edition of the Software Development Kit (SDK) for Windows Vista.