Geoff Chappell - Software Analyst
This function obtains various items of text suitable for describing Windows and Internet Explorer to users, e.g., in an About dialog.
BOOL SHAboutInfo ( LPTSTR lpBuffer, UINT cchBuffer);
The function exists in ANSI and Unicode forms.
The lpBuffer argument provides the address of a buffer that is to receive the descriptive string.
The cchBuffer argument provides the capacity of the buffer, in characters.
The function returns TRUE for success, else FALSE for failure.
The function constructs a single null-terminated string, using the tilde to separate the various items that the function considers worth reporting about Windows and Internet Explorer. Currently, seven items are reported, in the form
Any number of these items may be empty. None may sensibly contain a tilde. If the given buffer is not large enough for the whole of this string, the function copies only as much as will fit (but still as a null-terminated string), and declares success.
Most of the items are obtained straightforwardly from entries in the HKEY_LOCAL_MACHINE branch of the registry, specifically from three keys which may be called, naturally enough, the Windows key, the NT key and the Internet Explorer key:
If running on NT, the function fails if it cannot open the NT key. Otherwise, it fails if it cannot open the Windows key.
Most commonly in practice, the version is constructed by concatenating as many as three parts:
Of these, the first is required, else the function leaves version empty. If BuildLab exists as a string value but with fewer than four characters, then results are undefined: the function skips the first four characters without checking that there are as many as four characters to skip.
An entirely different construction of version applies if the function is called in a process that does not have among its loaded modules one named either EXPLORER.EXE or IEXPLORE.EXE. The version is then obtained from the SHLWAPI resources, currently from number 271 in the string table, which equates to “Side-by-Side Mode” in the U.S. release.
(If you doubt this dependence on the filename, make a copy of IEXPLORE.EXE, run the copy, call up the About Internet Explorer dialog and look for what it says is its version. If you name the copy ABOUT.EXE, you get “Side-by-Side Mode” as the version. Rename it to EXPLORER.EXE and you get the more meaningful version.)
The registered owner is the string value RegisteredOwner from the NT key, if running on NT, else from the Windows key.
The registered organisation is the string value RegisteredOrganization from the NT key, if running on NT, else from the Windows key.
The cipherstrength is the maximum cipher strength allowed by the Microsoft Unified Security Protocol Provider. This is the one item that the function does not itself obtain from the registry. The function instead loads and interrogates one or more of SCHANNEL.DLL, SECUR32.DLL and SECURITY.DLL through the Security Support Provider Interface (SSPI).
The productid is the string value ProductId from the Registration subkey of the Internet Explorer key.
The updateurl is the string value IEAKUpdateUrl from the Windows key.
The helpstring is the string value IEAKHelpString from the NT key, if running on NT, else from the Windows key.
Of the ANSI and Unicode forms of this function, the ANSI has the native implementation. The Unicode implementation provides a temporary buffer for a call to the ANSI form and converts the ANSI output to Unicode. It may therefore (though not likely) fail for lack of memory or because of some error in the character-set conversion.
The only known use that Microsoft makes of this function in executables distributed with Windows is for the “About Internet Explorer” dialog box. The code for calling the function and passing the returned information as the arguments for a dialog box is in SHDOCVW.DLL. The dialog box that SHDOCVW asks be loaded is an HTML resource named ABOUT.DLG in SHDOCLC.DLL. Interpretation of the string produced by SHAboutInfo falls to this dialog’s script. See for instance the line
arrArgs = window.dialogArguments.split("~");
which demonstrates the dialog box’s knowledge that the string has the tilde as a separator.
The SHAboutInfo function is exported from SHLWAPI as ordinals 160 and 161 (for ANSI and Unicode forms respectively) in version 4.71 and higher.
Though this function dates from as long ago as 1997, it was still not documented by Microsoft in the MSDN Library at least as late as the CD edition dated January 2004.
Note in particular that Microsoft did not document SHAboutInfo among the Settlement Program Interfaces. That this function is the immediate source of input for the About Internet Explorer dialog surely puts beyond doubt that it is used by a component of Internet Explorer. That this function escaped being documented for the settlement would seem therefore to imply that Microsoft interprets the settlement’s definitions such that SHLWAPI.DLL (or at least the source file that implements this function) is a component of Internet Explorer but not of Windows.