A Study of the Windows Shell

In 2002 Microsoft documented a few hundred
Settlement
Program Interfaces as an outcome of an anti-trust suit brought by various U.S.
governments. If one accepts at face value Microsoft’s talk of having “fulfilled
its obligations under the consent decree”, one might suppose that these few hundred
functions are all that there can be. And perhaps they are, if only under some strict
reading or self-serving interpretation of what was agreed in the settlement. But
how is anyone to know?

Completeness of Microsoft’s disclosure is certainly not obvious for the functions
provided by various modules of the Windows shell. Just over a hundred shell functions
were newly documented for the settlement, yet many hundreds were left undocumented
and most of them remain undocumented, even 5 years later.

Of course, the settlement does not require that all previously undocumented functions
must now be documented. What it requires is documentation of the functions that
are coded in a component of Windows (specifically Windows 2000 or later) and used
by a component of so-called middleware, the most notable example of which is Internet
Explorer. But that so many previously undocumented functions remain undocumented
is surely grounds enough to look more closely. Moreover, if any significant number
of these undocumented functions look to fit the requirements of the settlement,
then someone with authority ought insist that Microsoft account in some detail for
its interpretation of which functions must be documented and which need not.

It’s not for me to pick over the fine detail of the settlement’s requirements,
but as my contribution to that exercise by others, I mean to lay out what I imagine
the lawyers may treat as facts of the matter. I survey the Windows shell functions,
whether documented or not, both for their history and for the use that Microsoft
presently makes of them, and begin what may be sustainable as an on-going project
of alternative documentation.

The executable modules studied here are three DLLs:
COMCTL32, SHELL32
and SHLWAPI. These executables are plainly essential
to the everyday look-and-feel of Windows as experienced by all but a handful of
users who run the Windows operating system but use a different shell.

Importantly, each of these executables is essential to Windows even while not
connected to the Internet, even on a machine that will never connect to the Internet.
They are essential to Internet Explorer, too, and each has been distributed with
at least one version of Internet Explorer, some with every version. But to say they
are components of Internet Explorer rather than of Windows would be to say that
users of Windows need Internet Explorer just to do things that have nothing to do
with the Internet. Mind you, that would not be the most perverse of things that
are claimed of Microsoft’s integration of Internet Explorer into the Windows shell,
or of the special development of the Windows shell to help Internet Explorer, or
whatever it is that Microsoft actually did.

In one series of lists, I trace in some detail the development of the functional
interface over all the versions that I have been able to find with reasonable ease
on old CDs from occasional MSDN subscriptions. My holdings are incomplete and are
anyway limited only to builds that had a retail release, but they probably do cover
all the major and minor versions since 1995 and many of the service packs too. A
special interest in designing this series is to highlight the long-established,
and indeed continuing, practice of adding functions that are not named in the executable
and are not documented in Microsoft’s literature.

In another series of lists, I pick as my reference one version of Windows and
report which other modules written by Microsoft and distributed with the same version
of Windows are known to use each function. Since these modules may be just for Windows
or also be distributed with other Microsoft products (such as Internet Explorer,
Outlook Express and Windows Media Player), these lists are the ones that will most
help anyone who cares to assess for themselves whether Microsoft’s selection of
“shell and common controls” functions to document as Settlement Program Interfaces
is even close to complete. My own assessment of which shell
functions has Microsoft missed is given separately (and, no, Microsoft’s disclosure
was nowhere near complete).

For a smattering of shell functions, I attempt my own documentation. Mostly,
these are functions that Microsoft for some reason hasn’t troubled to document publicly,
or hasn’t always, but there is no particular pattern to my selection. To the extent
that documenting one function is much like documenting another, my choice is open
to influence: if there’s a function you would like to see documented in this study,
make a case for your wish list and
write
to me about it.

For both the lists and the alternative documentation, please be familiar with
the Reading Guide for general assumptions and conventions.

Placeholder links to ensure that all pages in the Shell study are reachable
from here: