COMCTL32 Versions

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.

Builds

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.

Build Number Shorthand

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

Assemblies

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.