| Home | Table of Contents | Please view with Internet Explorer (version 5.00 or higher) and enable scripting. For reasons, see Browsing This Web Site. |
The 32-bit Common Controls library (COMCTL32.DLL) has so far existed in 11 variations considered by Microsoft to have sufficient external impact to deserve at least a difference in the minor version number.
| COMTL32 Version | Distribution | ||
|---|---|---|---|
| Windows | NT | Internet Explorer | |
| 3.50 | |||
| 3.51 | Windows NT 3.51 | ||
| 4.00 | Windows 95 | 3.00 | |
| 4.70 | Windows 95 OSR2 | Windows NT 4.0 | 3.01, 3.02 |
| 4.71 | 4.0 | ||
| 4.72 | Windows 98 | late NT 4.0 service packs | 4.01 |
| 5.80 | Windows 98 SE | 5.0 | |
| 5.81 | Windows Me | Windows 2000 | 5.01, 5.5, 6.0 |
| 5.82 | Windows XP, Windows Server 2003, Windows Vista |
||
| 6.00 | Windows XP (SxS) Windows Server 2003 (SxS) |
||
| 6.10 | Windows Vista (SxS) | ||
No distribution with Windows, NT or Internet Explorer is shown for version 3.50 because all copies inspected were found on disks for other products (specifically, for Win32s as redistributed with various packages for Windows programming). Versions 3.50 and 3.51 predate my experience with 32-bit user-mode Windows and have been included in this study mostly for curiosity. They also predate what has become for most users the essential look and feel of Windows, i.e., the taskbar and Start menu. Yet these versions are 32-bit executables, they are named COMCTL32.DLL (in contrast to the 16-bit COMMCTRL.DLL), and there is demonstrable continuity—including for some functions that Microsoft finally got round to documenting in 2006, supposedly as being new for Windows Vista!
Windows XP, Windows Server 2003 and Windows Vista each supply two or even three versions of COMCTL32. Versions 6.00 and 6.10 are meant only as side-by-side (SxS) assemblies and must be requested via an application manifest. Version 5.82 is meant for general use as a natural upgrade from earlier Windows versions. It is the copy in the Windows System directory, though it may also be installed among the assemblies and can be specified in a manifest.
Until at least 2007, version 5.82 was omitted from the presumably authoritative review of shell DLL versions that Microsoft presents on the page Shell and Common Controls Versions in the MSDN Library. This omission is curious since version 5.82 was by then quite old yet still current, being used by programs that for one reason or another have not been built with a manifest. Curiously, it is now (16th September 2008) versions 6.00 and 6.10 that are omitted from the table, though “version 6” gets a mention afterwards, in a note.
Microsoft’s list may have a false positive also: Microsoft says that version 4.00 is “found on the original versions of … Windows NT 4.0”, and perhaps it is, somewhere that I have missed, but my inspection of what seems to be an original version of NT 4.0 turns up 4.70. A version 4.00 for NT is known, however, in an Internet Explorer 3.00 for Windows NT. (Unfortunately for any forensic interest in this early history, I have no Internet Explorer 3.00 for Windows 95.)
Note that my list does not say whether COMCTL32 is distributed with Internet Explorer 7.0. I have no copy for inspection. It appears that Internet Explorer is no longer included with MSDN subscriptions.
Though the next table fusses over such details as build numbers and dates, it is certainly not meant as a comprehensive list even of builds that had formal, public releases. For that, consult Microsoft, who manufacture the software and are surely best able of anyone to present a definitive record. Bear in mind, however, that if Microsoft’s published documentation could sensibly be relied on as either comprehensive or accurate, then you could not now be reading these notes.
Builds are arranged in increasing order of the file version as recorded in the executable’s resources. This version number is readily visible using Windows Explorer either in a so-called infotip for the file or by accessing the Version tab in the Properties dialog for the file. Programmers know this version number as coming from the so-called root block of the version-information resource, specifically from the dwFileVersionMS and dwFileVersionLS members of a VS_FIXEDFILEINFO structure.
The date stamp shown for each version is more obscure. File dates are easily modified after the executable is built and are anyway liable to be shown differently when read from different time zones. However, there is in each executable’s header a date stamp which is set when the executable is built and which is not commonly changed afterwards. It is readily accessible to anyone with programming knowledge and appropriate tools, e.g., Microsoft’s own DUMPBIN utility.
| File Version | File Header Date Stamp | Size | Package |
|---|---|---|---|
| 3.50.1057.158 | 30032D75 (12th July 1995) | 201,728 | Win32s 1.30 (Win32 SDK) |
| 3.50.1057.166 | 304C65B8 (6th September 1995) | 284,432 | Win32s 1.30 (Visual C++ 4.0, 4.1) |
| 3.51.1052.1 | 2FC3DDD9 (25th May 1995) | 199,440 | Windows NT 3.51 |
| 4.0.0.950 | 2FF383BD (30th June 1995) | 182,272 | Windows 95 |
| 4.0.1234.1 | 312D2708 (23rd February 1996) | 267,776 | Internet Explorer 3.00 (NT) |
| 4.70.1144.1 | 31F95735 (27th July 1996) | 310,544 | Windows NT 4.0 |
| 4.70.0.1146 | 3201445E (2nd August 1996) 320D0356 (11th August 1996) |
379,152 | Internet Explorer 3.01, 3.02 Windows 95 OSR2 |
| 4.70.1147.1 | 336106FE (26th April 1997) | 310,032 | Windows NT 4.0 SP3 |
| 4.71.1712.3 | 342172BB (19th September 1997) | 447,760 | Internet Explorer 4.0 (Windows) |
| 432173A5 (19th September 1997) | 461,072 | Internet Explorer 4.0 (NT) | |
| 4.72.2106.4 | 347246C0 (19th November 1997) | 449,296 | Internet Explorer 4.01 (Windows) |
| 347247A4 (19th November 1997) | 462,608 | Internet Explorer 4.01 (NT) | |
| 4.72.3110.1 | 35474F62 (30th April 1998) | 458,752 | Windows 98 |
| 3553AA8E (9th May 1998) | 447,760 | Internet Explorer 4.01 SP1 (Windows) | |
| 3553AB87 (9th May 1998) | 463,120 | Internet Explorer 4.01 SP1 (NT) | |
| 4.72.3609.2200 | 361A60A0 (7th October 1998) | 464,144 | Windows NT 4.0 SP4 |
| 4.72.3612.1702 | 36E5A94E (10th March 1999) | 465,680 | Windows NT 4.0 SP5, SP6 |
| 36EEB448 (17th March 1999) | 450,832 | Internet Explorer 4.01 SP2 (Windows) | |
| 36EEB5B0 (17th March 1999) | 465,680 | Internet Explorer 4.01 SP2 (NT) | |
| 5.80.2314.1000 | 36F1D8D8 (19th March 1999) | 577,808 | Internet Explorer 5.0 (Windows) |
| 36F1DBAF (19th March 1999) | 557,328 | Internet Explorer 5.0 (NT) | |
| 5.80.2614.3500 | 3720A1CD (24th April 1999) | 577,808 | Windows 98 SE |
| 5.81.2920.0 | 3844D035 (1st December 1999) | 553,232 | Windows 2000 |
| 5.81.3103.1000 | 38E3FD10 (31st March 2000) | 529,680 | Internet Explorer 5.01 (Windows 2000) |
| 3947EB46 (15th June 2000) | 550,672 | Windows 2000 SP1 | |
| 5.81.3105.105 | 3941292C (10th June 2000) | 569,104 | Internet Explorer 5.01 (Windows) |
| 39412A8F (10th June 2000) | 552,720 | Internet Explorer 5.01 (NT) | |
| 5.81.3315.3727 | 3D3D020C (23rd July 2001) | 552,208 | Windows 2000 SP3 |
| 5.81.3502.6601 | 3EF274DD (20th June 2002) | 550,672 | Windows 2000 SP4 |
| 5.81.4134.100 | 39403BE1 (9th June 2000) | 581,632 | Windows Me |
| 5.81.4134.600 | 393D876E (7th June 2000) | 569,616 | Internet Explorer 5.5 (Windows) |
| 393D8BF4 (7th June 2000) | 553,232 | Internet Explorer 5.5 (NT) | |
| 5.81.4704.1100 | 3B7DFE48 (18th August 2001) | 569,616 | Internet Explorer 6.0 (Windows) |
| 3B7DFFE7 (18th August 2001) | 553,232 | Internet Explorer 6.0 (NT) | |
| 5.81.4807.2300 | 3B5CD622 (24th July 2001) | 569,616 | Internet Explorer 5.5 SP2 (Windows) |
| 3B5CD984 (24th July 2001) | 553,232 | Internet Explorer 5.5 SP2 (NT) | |
| 5.81.4916.400 | 3D6E2AA6 (30th August 2002) | 548,624 | Internet Explorer 6.0 SP1 (Windows) |
| 3D6E2BF2 (30th August 2002) | 529,680 | Internet Explorer 6.0 SP1 (NT) | |
| 5.82.2600.0 | 3B7DFE0F (18th August 2001) | 557,568 | Windows XP |
| 5.82.2800.1106 | 3D6DFA2A (29th August 2002) | 557,056 | Windows XP SP1a |
| 5.82.2900.2180 | 411096AF (4th August 2004) | 611,328 | Windows XP SP2 |
| 5.82.3790.0 | 3E802498, 3E8024C5 (25th March 2003) | 574,464 | Windows Server 2003 |
| 5.82.3790.1830 | 42437797, 424377F2 (25th March 2005) | 599,040 | Windows Server 2003 SP1 |
| 5.82.6000.16386 | 4549BCB0, 4549BD08 (2nd November 2006) | 537,088 | Windows Vista |
| 6.0.2600.0 | 3B7DFE32 (18th August 2001) | 921,088 | Windows XP Windows XP SP1a Windows Server 2003 Windows XP SP2 |
| 6.0.2800.1106 | 3D6DF9B6 (29th August 2002) | 921,600 | Windows XP SP1a |
| 6.0.2900.2180 | 4110968C (4th August 2004) | 1,050,624 | Windows XP SP2 |
| 6.0.3790.0 | 3E8024C5 (25th March 2003) | 928,768 | Windows Server 2003 |
| 6.0.3790.1830 | 42437797 (25th March 2005) | 1,051,136 | Windows Server 2003 SP1 |
| 6.10.6000.16386 | 4549BD09 (2nd November 2006) | 1,648,128 | Windows Vista |
Internet Explorer 3.01 and 3.02 have exactly the same COMCTL32.DLL. The one from Windows 95 OSR2 is the same except for rebasing, both for the executable itself and for imported addresses, with a corresponding change in the file header’s date stamp and checksum.
The COMCTL32.DLL executables for NT 4.0 Service Packs 5 and 6 are exactly identical.
Build 2600 of version 6.00 is distributed with three releases of Windows XP and one of Windows Server 2003, but is exactly the same in all.
Where version 5.82 is supplied both in the Windows System directory and as an assembly, the two differ only because of rebasing and the consequent change in the file header’s date stamp and checksum.
Version 5.82 is especially long-lived, with streams from three different products, such that the programming interface is acquiring some difficult variation from build to build. One variation, in which functions that were exported only by ordinal become also exported by name, arises from Microsoft’s documentation of Settlement Program Interfaces and also affects version 6.00. This version is almost as difficult, but at least Microsoft was kind enough to bump up the version number to 6.10 for Windows Vista, apparently bringing version 6.00 to an end, while version 5.82 lives on.
Among much that is silly about this is that Microsoft has long campaigned that programmers should test the version number of the DLL that they want their code to interact with, rather than assume that a particular version of that DLL is present for a particular version of Windows. Then Microsoft goes and makes the DLL version number all but useless!
To save repeated reference to the details of build numbers, or to a tiresome enumeration of applicable products and service packs, the following shorthands apply throughout these notes. If scripting is enabled, then wherever these shorthands appear on other pages, hovering the mouse cursor over the text should produce an elaboration as a tooltip.
| post-settlement 5.82 builds | 2800 and higher | Windows XP: from SP1a Windows Server 2003: all Windows Vista: yes |
| late 5.82 builds | 2900 and higher | Windows XP: from SP2 Windows Server 2003: all Windows Vista: yes |
| very late 5.82 builds | 6000 and higher | Windows Vista |
| post-settlement 6.00 builds | 2800 and higher | Windows XP: from SP1a Windows Server 2003: all Windows Vista: yes |
| late 6.00 builds | 2900 and higher | Windows XP: from SP2 Windows Server 2003: all Windows Vista: yes |
The various releases of Windows XP, Windows Server 2003 and Windows Vista each have as many as three different COMCTL32 builds. All have a version 5.82 in the Windows System directory. More builds, from versions 5.82, 6.00 and 6.10, are supplied as assemblies.
Each assembly is represented by an executable and a manifest. Both are in the tree beneath the WinSxs subdirectory of the Windows directory. The executables are all named COMCTL32.DLL, but different versions are in different subdirectories. The executable in the subdirectory named assembly has the manifest named assembly.manifest in the Manifests subdirectory. Note that the version number contained in this name can differ significantly from what the executable reports, both statically in its version-information resource and at run-time for the DllGetVersion function.
| File Version | Assembly Directory |
|---|---|
| 5.82.3790.0 | x86_Microsoft.Windows.Common-Controls_6595b64144ccf1df_5.82.0.0_x-ww_8a69ba05 |
| 5.82.3790.1830 | x86_Microsoft.Windows.Common-Controls_6595b64144ccf1df_5.82.3790.1930_x-ww_1b6f474a |
| 5.82.6000.16386 | x86_Microsoft.Windows.Common-Controls_6595b64144ccf1df_5.82.6000.16386_none_87e0cb09378714f1 |
| 6.0.2600.0 | x86_Microsoft.Windows.Common-Controls_6595b64144ccf1df_6.0.0.0_x-ww_1382d70a |
| 6.0.2800.0 | x86_Microsoft.Windows.Common-Controls_6595b64144ccf1df_6.0.10.0_x-ww_f7fb5805 |
| 6.0.2900.2180 | x86_Microsoft.Windows.Common-Controls_6595b64144ccf1df_6.0.2600.2180_x-ww_a84f1ff9 |
| 6.0.3790.0 | x86_Microsoft.Windows.Common-Controls_6595b64144ccf1df_6.0.100.0_x-ww_8417450b |
| 6.0.3790.1830 | x86_Microsoft.Windows.Common-Controls_6595b64144ccf1df_6.0.3790.1830_x-ww_7ae38ccf |
| 6.10.6000.16386 | x86_Microsoft.Windows.Common-Controls_6595b64144ccf1df_6.0.6000.16386_none_5d07289e07e1d100 |
The Windows versions that have version 5.82 as an assembly also include this assembly in what Microsoft’s symbol files suggest is called the System Default Activation Context, as constructed from the Microsoft.Windows.SystemCompatible manifest. If a program with no application manifest runs on these Windows versions and loads COMCTL32.DLL, its request is redirected to the copy among the assemblies, much as if the program actually had specified version 5.82 in an application manifest.