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
.hhcfor contents and.hhkfor 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:
- The WebBrowser control requested the custom
its:resource. - Windows routed the request through
itss.dll. itss.dlllocated the requested file within the LZX-compressed archive stream.- The decompressed bytes were streamed directly into memory.
- 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.