COMCTL32 Versions

The 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.0 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 Windows 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
Windows Server 2008
Windows 7
 
6.0   Windows XP (SxS)
Windows Server 2003 (SxS)
 
6.10   Windows Vista (SxS)
Windows Server 2008 (SxS)
Windows 7 (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, Windows Vista, Windows Server 2008 and Windows 7 each supply two, three or even four versions of COMCTL32. Versions 6.0 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.0 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.0 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 only. A version 4.0 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.)

COMCTL32 was for many years distributed with Internet Explorer as well as with Windows. Indeed, it was often that the earliest way to obtain new COMCTL32 features so that your Windows programs would look better was not to get your customers to use the latest build of Windows but to install the latest Internet Explorer. Distribution of COMCTL32 with Internet Explorer is discontinued in Internet Explorer 7.0.

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 SP1
5.82.2900.2180 411096AF (4th August 2004) 611,328 Windows XP SP2
5.82.2900.5512 4802A0C8 (14th April 2008) 617,472 Windows XP SP3
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.3790.3959 45D70A06, 45D70A71 (18th February 2007) 599,040 Windows Server 2003 SP2
5.82.6000.16386 4549BCB0, 4549BD08 (2nd November 2006) 537,088 Windows Vista
Windows Vista SP1
5.82.6001.18000 4791A629, 4791A751 (19th January 2008) 531,968 Windows Vista SP1
Windows Server 2008
5.82.7600.16385 4A5BDA24 (14th July 2009) 530,432 Windows 7
6.0.2600.0 3B7DFE32 (18th August 2001) 921,088 Windows XP
Windows XP SP1
Windows Server 2003
Windows XP SP2
6.0.2800.1106 3D6DF9B6 (29th August 2002) 921,600 Windows XP SP1
6.0.2900.2180 4110968C (4th August 2004) 1,050,624 Windows XP SP2
6.0.2900.5512 4802A094 (14th April 2008) 1,054,208 Windows XP SP3
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.0.3790.3959 45D70A05 (18th February 2007) 1,051,648 Windows Server 2003 SP2
6.10.6000.16386 4549BD09 (2nd November 2006) 1,648,128 Windows Vista
Windows Vista SP1
6.10.6001.18000 4791A752 (19th January 2008) 1,684,480 Windows Vista SP1
Windows Server 2008
6.10.6002.18005 49E036F3 (11th April 2009) 1,686,016 Windows Vista SP2
6.10.7600.16385 4A5BD976 (14th July 2009) 1,680,896 Windows 7

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.

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.

Several builds of versions 5.82, 6.00 and 6.10 are each shown with two or more packages. In each such case, the executables are exactly the same.

Build Number Shorthand

Version 5.82 is especially long-lived, with streams from five different products, such that the programming interface is acquiring some difficult variation from build to build. One variation, in which functions that had been exported only by ordinal become also exported by name, arises from Microsoft’s documentation of Settlement Program Interfaces and also affects version 6.0. 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.0 to an end, while version 5.82 lives on. Version 6.10 looks set to live long, too, for although Windows 7 is promoted as an important advance on Windows Vista, it does not raise the version number for COMCTL32.

Among much that is silly about all 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!

This study refers to applicable products and service packs in ascending order of versions and build numbers. Be aware that this is not chronological order. For instance, the phrase “version 6.0 from Windows XP SP2 and higher” also includes all builds of version 6.0 from Windows Server 2003, even though the original Windows Server 2003 predates Windows XP SP2. Where the original Windows Server 2003 is excluded, as sometimes is needed, the two products are specified: “version 6.0 from Windows XP SP2 and Windows Server 2003 SP1 and higher”. A comma before “and higher” indicates that the description takes in not only higher builds from the stated version but also higher versions. For instance, the phrase “version 6.0 from Windows XP SP2, and higher” also includes version 6.10 from Windows 7.

COMCTL32 presents a particular problem in that some development of version 5.82 occurs in parallel with versions 6.0 and 6.10. A phrase such as “versions 5.82 and 6.0 from Windows XP SP1 and higher” is equivalent to the combination of “version 5.82 from Windows XP SP1 and higher” and “version 6.0 from Windows XP SP1 and higher”, and thus does not include the build of version 6.0 from the original Windows XP. A phrase such as “versions 5.82 and 6.10 from Windows Vista SP1 and higher” is equivalent to the combination of “version 5.82 from Windows Vista SP1 and higher” and “version 6.10 from Windows Vista SP1 and higher”, and thus does not include any builds of version 6.0 nor the build of version 6.10 from the original Windows Vista.

Assemblies

The various releases of Windows XP, Windows Server 2003 and Windows Vista each have as many as four 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.1830_x-ww_1b6f474a
5.82.3790.3959 x86_Microsoft.Windows.Common-Controls_6595b64144ccf1df_5.82.3790.3959_x-ww_78fcf8d0
5.82.6000.16386 x86_Microsoft.Windows.Common-Controls_6595b64144ccf1df_5.82.6000.16386_none_87e0cb09378714f1
5.82.6001.18000 x86_Microsoft.Windows.Common-Controls_6595b64144ccf1df_5.82.6001.18000_none_886786f450a74a05
5.82.7600.16385 x86_Microsoft.Windows.Common-Controls_6595b64144ccf1df_5.82.7600.16385_none_ebf82fc36c758ad5
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.2900.5512 TO BE DONE
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.0.3790.3959 x86_Microsoft.Windows.Common-Controls_6595b64144ccf1df_6.0.3790.3959_x-ww_d8713e55
6.10.6000.16386 x86_Microsoft.Windows.Common-Controls_6595b64144ccf1df_6.0.6000.16386_none_5d07289e07e1d100
6.10.6001.18000 x86_Microsoft.Windows.Common-Controls_6595b64144ccf1df_6.0.6001.18000_none_5cdbaa5a083979cc
6.10.6002.18005 x86_Microsoft.Windows.Common-Controls_6595b64144ccf1df_6.0.6002.18005_none_5cb72f96088b0de0
6.10.7600.16385 x86_Microsoft.Windows.Common-Controls_6595b64144ccf1df_6.0.7600.16385_none_421189da2b7fabfc

The Windows packages 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 that has no application manifest runs on these Windows versions, the COMCTL32.DLL that gets loaded is the copy among the assemblies, much as if the program actually had specified version 5.82 in an application manifest.