How Windows 98 Rendered CHM HTML Help Files

With the release of Windows 98, Microsoft revolutionized software documentation by transitioning from the legacy WinHelp (.hlp) format to Compiled HTML Help (.chm). Windows 98 rendered these files by tightly coupling the operating system with the Internet Explorer Trident rendering engine, wrapping compressed internal web pages inside an InfoTech storage container, and serving them locally to an ActiveX-driven interface.

The HTML Help Executable and Interface (hh.exe and hhctrl.ocx)

When a user double-clicked a .chm file in Windows 98, the operating system launched hh.exe (Microsoft HTML Help Executable). This lightweight application served as a host shell rather than a rendering engine.

To build the visual interface, hh.exe relied on hhctrl.ocx, an ActiveX control that generated the standard two-pane help window:

  • The Navigation Pane: The left side generated the interactive tabs for the Table of Contents, Index, and Full-Text Search. These elements were compiled from specialized text files inside the archive—specifically .hhc for contents and .hhk for keywords.
  • The Document Pane: The right side served as a container hosting the Microsoft WebBrowser control (shdocvw.dll), providing the canvas to display compiled web pages.

The MSHTML Rendering Engine

Because Windows 98 integrated Internet Explorer 4.0 directly into the operating system, the system used the MSHTML (Trident) engine to parse and display help files.

Instead of building a dedicated text formatting pipeline, Microsoft reused the Trident browser engine. As a result, .chm files possessed the exact same rendering capabilities as Internet Explorer at the time, supporting:

  • Standard HTML tags and styling
  • Cascading Style Sheets (CSS)
  • Client-side scripting via JScript and VBScript
  • Embedded ActiveX controls and multimedia elements

InfoTech Storage Architecture (ITSS)

A .chm file was an encapsulated archive based on the InfoTech Storage Format (ITSF). Inside the single binary package were all the HTML files, images, style sheets, and navigation indices, compressed using the LZX algorithm to conserve disk space.

To read this format, Windows 98 utilized itss.dll (InfoTech Storage System). This dynamic link library enabled the operating system to parse the compressed archive structure without needing to extract the contents to a temporary directory on the hard drive.

The Pluggable Asynchronous Protocol

To connect the MSHTML rendering engine directly to the compressed files inside the archive, Windows 98 implemented proprietary Asynchronous Pluggable Protocols: mk:@MSITStore: and later its:.

When the WebBrowser control requested a page or an inline image, it constructed an internal URL following this pattern:

its:C:\Windows\Help\example.chm::/html/intro.htm

The flow executed as follows:

  1. The WebBrowser control requested the custom its: resource.
  2. Windows routed the request through itss.dll.
  3. itss.dll located the requested file within the LZX-compressed archive stream.
  4. The decompressed bytes were streamed directly into memory.
  5. The MSHTML engine parsed the data stream and rendered the final HTML document in the display pane.

This unified approach allowed Windows 98 to deliver rich, hyperlinked, and searchable documentation with minimal system resource overhead.