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.