QueryInterface Helper

Right from the start, COM interfaces have been vital to communication between shell modules, e.g., from EXPLORER.EXE to SHELL32.DLL, and as a significant means of exposing shell objects to programmatic access by shell clients (notwithstanding that many of the necessary CLSIDs and IIDs were left undocumented). As these interfaces grew in number and complexity, and especially as Internet Explorer was “integrated” into the shell, it was only natural that the shell modules would acquire for themselves an efficient, standardised helper for implementing the QueryInterface method.

As it happens, the shell modules acquired their helper from elsewhere. Its first known appearance is in early versions of SHDOCVW.DLL, e.g., for Internet Explorer 4.0 and Windows 98, though not as an export. It was moved into SHLWAPI.DLL for version 5.00, exported, and used widely.

Perhaps because of this history elsewhere, someone must have thought the function important enough to keep separate. In SHDOCVW, it was just one of numerous functions buried in a file of miscellaneous utility functions (UTIL.OBJ), but in SHLWAPI it sits in its own file (QISTUB.OBJ).