HAL Versions

Each new name for a Windows package brings at least a change of the minor version number for the Hardware Abstraction Layer (HAL) until contemporaneous client and server packages are reunited for version 6.0.

File Version Distribution
3.10 Windows NT 3.1
3.50 Windows NT 3.50
3.51 Windows NT 3.51
4.0 Windows NT 4.0
5.0 Windows 2000
5.1 Windows XP
5.2 Windows Server 2003
6.0 Windows Vista
Windows Server 2008
6.1 Windows 7
Windows Server 2008 R2
6.2 Windows 8
6.3 Windows 8.1
10.0 Windows 10

It is not often enough appreciated enough that although Windows XP and Windows Server 2003 were largely contemporaneous, they were significantly different at kernel-level. Just as much under-appreciated is that although Windows Vista and Windows Server 2008 were marketed as very different, being for use as client and server respectively, their corresponding HALs are exactly one and the same. On the assumption that similar unification is intended forever, I do not keep downloading releases of the server products just to check the correspondence with client products.

The version numbering gets indisputably quirky for Windows Vista, Windows 7, Windows 8 and Windows 8.1. These were each in their time promoted as a significant—even major—release, yet they all have the same major version number which anyway isn’t in any of the names. As if to acknowledge this as unsatisfactory, the major version number for Windows 10 leaps ahead to 10.

HAL Files

Each 32-bit Windows package is distributed with a selection of HALs which are each specialised for particular hardware. These HALs have different names as files on the distribution media. Early versions of Windows come with very many HALs, and some service packs add HALs that were not in the original releases of the same Windows version. The trend, however, is that the selection gets thinner as Windows matures. Windows Vista and Windows 7 settle on two HALs. Windows 8 leaves just the one.

Versions before Windows Vista install only one of their many HALs. Whichever is chosen, the installed copy is named HAL.DLL. This standard name is hard-coded into the loader. Unless an alternative is specified by a /HAL switch in BOOT.INI, the HAL that is loaded is whatever file is named HAL.DLL.

Windows Vista and higher install one HAL as HAL.DLL, as with earlier versions, but also install their one or two HALs under their own names. These names are hard-coded into the loader, along with the standard name HAL.DLL. In Windows Vista specifically, a detecthal option in the Boot Configuration Data (BCD) may direct the loader to select from the two. In Windows Vista and higher, a hal option can specify any file to load as the HAL, but ordinarily the HAL that is loaded is whatever file is named HAL.DLL.

The following table attempts to sketch the history of the different HALs by showing the file name, a descriptive string from within the file, and the Windows releases that are known to have included the file. The descriptive string is from a variable that Microsoft’s symbol files name as HalName.

File Name HAL Name Distribution
hal.dll PC Compatible Eisa/Isa HAL Windows NT 3.1
Windows NT 3.50
Windows NT 3.51
Windows NT 4.0
Windows 2000 except SP1
Windows XP
Windows Server 2003
hal.dll.softex PC Compatible Eisa/Isa HAL Windows NT 4.0 SP4, SP5 and SP6
hal486c.dll PC Compatible Eisa/Isa HAL (486 C Stepping) Windows NT 3.1
Windows NT 3.50
Windows NT 3.51
Windows NT 4.0
Windows 2000 SP3 and SP4
hal98apc.dll NEC PC-9800 APIC HAL Windows 2000 SP3 and SP4
hal98mp.dll NEC PC-9800 MPS HAL Windows 2000 SP3 and SP4
hal98tmr.dll PC-9800 System Clock 10MHz (support 2nd Timer) Windows 2000 SP3 and SP4
hal98up.dll PC-9800 System Clock 10MHz Windows 2000 SP3 and SP4
halaacpi.dll ACPI 1.0 - APIC platform UP Windows 2000
Windows XP
Windows Server 2003
halacpi.dll ACPI Compatible Eisa/Isa HAL Windows 2000 and higher;
until discontinued in Windows 8
halapic.dll UP MPS 1.1 - APIC platform Windows NT 3.51
UP MPS 1.4 - APIC platform Windows NT 4.0
Windows 2000 except SP1
Windows XP
Windows Server 2003
halast.dll AST Manhattan MP HAL Windows NT 3.1
Windows NT 3.50
Windows NT 3.51
Windows NT 4.0
halborg.dll SGI HAL Windows 2000
halcbus.dll Corollary SMP-CbusI and CbusII MP HAL Windows NT 3.1
Windows NT 3.50
Corollary C-bus Architecture MP HAL Version 3.2.0 Windows NT 3.51
Corollary C-bus Architecture MP HAL Version 3.4.0 Windows NT 4.0
halcbusm.dll Corollary C-bus Architecture MP HAL Version 3.2.0 Windows NT 3.51 SP5
Corollary C-bus MicroChannel Architecture MP HAL Version 3.4.0 Windows NT 4.0
halmacpi.dll ACPI 1.0 - APIC platform MP Windows 2000 except SP1
Windows XP
Windows Server 2003
ACPI x86 platform Windows Vista and higher
halmca.dll PC Compatible MicroChannel HAL Windows NT 3.1
Windows NT 3.50
Windows NT 3.51
Windows NT 4.0
halmps.dll MPS 1.1 - APIC platform Windows NT 3.50
Windows NT 3.51
MPS 1.4 - APIC platform Windows NT 4.0
Windows 2000 except SP1
Windows XP
Windows Server 2003
halmps.dll.softex MPS 1.4 - APIC platform Windows NT 4.0 SP4, SP5 and SP6
halmpsm.dll MPS 1.4 MCA - APIC platform Windows NT 4.0
halncr.dll NCR 3x series MP HAL Windows NT 3.1
Windows NT 4.0 except SP3
haloli.dll Olivetti LSX5030 MP HAL Windows NT 3.1
Windows NT 3.50
Windows NT 3.51
Windows NT 4.0
halsp.dll SystemPro or compatible MP HAL Windows NT 3.1
Windows NT 3.50
Windows NT 3.51
Windows NT 4.0
Windows 2000 except SP1
Windows XP
halws3.dll Sequent WinServer (TM) 3500 HAL Windows NT 3.51 SP5
halwyse7.dll Wyse7000i MP HAL Windows NT 3.1
Windows NT 3.51
Windows NT 4.0

From the Release Notes for Windows NT 4.0 SP4, it seems that the files named HAL.DLL.SOFTEX and HALMPS.DLL.SOFTEX are intended to replace HAL.DLL and HALMPS.DLL on systems that have various “Softex Incorporated and Phoenix Technologies utilities”. The version resources in both files list “Softex, Inc” as the manufacturer and copyright holder.

HALBORG.DLL is another HAL that is unusual in naming its manufacturer as someone other than Microsoft. Its version resources list the manufacturer as SGI and assert copyright for Silicon Graphics, Inc.

Builds

The following 32-bit (x86) builds have been inspected for these notes. Most are from MSDN discs. Some, especially since Microsoft greatly reduced its shipment of operating systems on MSDN discs, are from service packs downloaded (typically as self-extracting executables) from a Microsoft website.

Special mention must be made of the very oldest builds. Even among the many discs I retain from MSDN subscriptions in the 1990s, what was then the new Windows that is entirely its own operating system rather than a large DOS program goes no further back than Windows NT 3.51 (almost as if Microsoft informally disowned the early builds). For decades I had little choice but to treat Windows NT 3.51 as the dawn of time for these notes. In 2017 someone pointed me to an online collection of earlier builds. The sample is inevitably incomplete. The provenance is unknown.

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 Name File Header Date Stamp File Size Package
no version resource hal.dll
hal486c.dll
halast.dll
halcbus.dll
halmca.dll
halncr.dll
haloli.dll
halsp.dll
halwyse7.dll
2C47123B (16th July 1993)
2C471242
2C4440D4 (14th July 1993)
2C3B5B9C (7th July 1993)
2C47123E
2C3B5AA7
2C3B5BA0
2C47122D
2C3B5B8B
48,164
46,068
55,796
62,676
45,556
58,180
50,516
53,636
49,972
Windows NT 3.1 Advanced Server
no version resource hal.dll
hal486c.dll
halast.dll
halcbus.dll
halmca.dll
halncr.dll
haloli.dll
halsp.dll
halwyse7.dll
2C7D4B45 (26th August 1993)
2C7D4B7F
2C7D49EA
2C7D49FD
2C8517C0 (1st September 1993)
2C7D4103
2C7D4A01
2C7D49D6
2C7D49E0
48,164
46,068
55,796
62,676
45,556
58,180
50,516
53,636
49,972
Windows NT 3.1 Workstation
3.50.807.1 hal.dll
hal486c.dll
halast.dll
halcbus.dll
halmca.dll
halmps.dll
haloli.dll
halsp.dll
halwyse7.dll
2FC633D3 (26th May 1995)
2FC633D8
2FC633E4
2FC633EB
2FC633DE
2FC6340B
2FC633F8
2FC633F2
2FC63405
50,336
49,232
50,416
68,544
47,712
63,008
45,712
48,288
46,192
Windows NT 3.50 SP3
3.51.1025.1 hal.dll
hal486c.dll
halapic.dll
halast.dll
halcbus.dll
halmca.dll
halmps.dll
haloli.dll
halsp.dll
halwyse7.dll
2FB24F4A (12th May 1995)
2FB24F4A
2FB24F68
2FB24F52
2FB24F55
2FB24F4C
2FB24F6A
2FB24F5E
2FB24F5C
2FB24F64
48,416
47,376
63,616
46,416
79,776
45,488
65,696
40,048
52,320
40,848
Windows NT 3.51
3.51.1029.1 halncr.dll 2FB24F73 (12th May 1995) 79,392
3.51.1057.6 hal.dll
hal486c.dll
halast.dll
halcbus.dll
halmca.dll
haloli.dll
halsp.dll
halws3.dll
halwyse7.dll
32110707 (14th August 1996)
32110707
3211070F
32110717
3211070F
3211071E
3211071E
32110725
32110726
49,296
48,256
46,512
80,448
78,592
40,256
53,168
49,648
40,944
Windows NT 3.51 SP5
halapic.dll
halmps.dll
321B9B3F (22nd August 1996)
321B9B3F
64,416
46,368
4.0.1372.1 hal.dll
hal486c.dll
halast.dll
halcbus.dll
halcbusm.dll
halmca.dll
haloli.dll
halsp.dll
halwyse7.dll
31EE6C52 (19th July 1996)
31EE6C52
31EE6C55
31EE6C58
31EE6C58
31EE6C55
31EE6C5B
31EE6C5B
31EE6C5E
51,424
47,840
45,888
81,728
79,872
45,952
39,904
56,064
40,512
Windows NT 4.0
4.0.1374.1 halncr.dll 31F05382 (20th July 1996) 78,304
4.0.1378.1 halapic.dll
halmps.dll
halmpsm.dll
31F578CB (24th July 1996)
31F578CB
31F578CD
65,664
67,776
66,752
4.0.1381.4 hal.dll
hal486c.dll
halapic.dll
halast.dll
halcbus.dll
halcbusm.dll
halmca.dll
halmps.dll
halmpsm.dll
haloli.dll
halsp.dll
halwyse7.dll
33247F88 (11th March 1997)
33247F8D
33247FB1
33247F94
33247F98
33247F9D
33247F91
33247FB6
33247FBA
33247FA5
33247FA1
33247FAC
51,744
48,160
66,240
45,920
81,952
80,096
46,208
68,288
67,328
39,968
56,352
40,512
Windows NT 4.0 SP3
hal.dll.softex
halmps.dll.softex
35E5D874 (28th August 1998)
35E5D875
76,160
92,960
Windows NT 4.0 SP4, SP5 and SP6
4.0.1381.86 halncr.dll 35D34E39 (14th August 1998) 79,040 Windows NT 4.0 SP4
4.0.1381.98 hal.dll
hal486c.dll
halapic.dll
halast.dll
halcbus.dll
halcbusm.dll
halmca.dll
halmps.dll
halmpsm.dll
haloli.dll
halsp.dll
halwyse7.dll
35E72341 (29th August 1998)
35E72346
35E72377
35E7234D
35E72350
35E72354
35E72349
35E72379
35E7237F
35E72366
35E7235E
35E72371
52,384
48,768
66,880
46,112
82,624
80,672
46,848
68,960
68,000
40,224
59,960
40,736
Windows NT 4.0 SP4 and SP5
4.0.1381.133 halncr.dll 36379189 (29th October 1998) 79,424 Windows NT 4.0 SP5
4.0.1381.164 hal.dll
hal486c.dll
halapic.dll
halast.dll
halcbus.dll
halcbusm.dll
halmca.dll
halmps.dll
halmpsm.dll
halncr.dll
haloli.dll
halsp.dll
halwyse7.dll
36C49893 (13th February 1999)
36C498C1
36C49A8B
36C49922
36C49954
36C4998E
36C498F8
36C49AC6
36C49AF9
36C49B16
36C499F5
36C499BB
36C49A49
52,352
48,736
66,880
46,112
82,624
80,672
46,784
68,960
68,000
79,424
40,224
56,960
40,736
Windows NT 4.0 SP6
5.0.2168.1 hal.dll
halapic.dll
halborg.dll
halmps.dll
halsp.dll
381B75AE (31st October 1999)
381B75B4
381B75B0
381B75B5
381B75AD
95,296
91,936
148,672
93,408
69,024
Windows 2000
5.0.2171.1 halaacpi.dll
halacpi.dll
halmacpi.dll
381F8C6E (3rd November 1999)
381F8C6E
381F8C6E
81,184
66,080
82,048
5.0.2195.1163 halborg.dll 38B32C16 (23rd February 2000) 148,768 Windows 2000 SP1
5.0.2195.1608 halaacpi.dll
halacpi.dll
3946DBB9 (14th June 2000)
3946DB7A
81,600
66,528
5.0.2195.4864 hal.dll
hal486c.dll
hal98apc.dll
hal98mp.dll
hal98up.dll
halapic.dll
halborg.dll
halmps.dll
halsp.dll
3C4DBAD2 (23rd January 2002)
3C4DBADA
3C4DBFA3
3C4DBAF8
3C4DBAF2
3C4DBAE1
3C4DBAD2
3C4DBAE1
3C4DBADA
95,456
63,968
106,496
107,904
110,080
92,192
148,960
93,632
69,088
Windows 2000 SP3
5.0.2195.4884 hal98tmr.dll 3C574F8E (30th January 2002) 110,048
5.0.2195.5201 halaacpi.dll
halacpi.dll
halmacpi.dll
3C989E09 (21st March 2002)
3C989E09
3C989E1E
82,112
66,848
82,976
5.0.2195.6655 hal.dll
hal486c.dll
hal98apc.dll
hal98mp.dll
hal98tmr.dll
hal98up.dll
halborg.dll
halsp.dll
3E25B985 (16th January 2003)
3E25B985
3E25B99F
3E25B9A1
3E25B99A
3E25B99C
3E25B981
3E25B989
95,456
63,968
106,496
107,904
110,016
110,080
148,960
69,088
Windows 2000 SP4
5.0.2195.6691 halaacpi.dll
halacpi.dll
halapic.dll
halmacpi.dll
halmps.dll
3E7A7338 (21st March 2003)
3E7A7338
3E7A731B
3E7A733A
3E7A731B
82,176
66,848
92,224
83,040
93,696
5.1.2600.0 hal.dll
halaacpi.dll
halacpi.dll
halapic.dll
halmacpi.dll
halmps.dll
3B7D8321 (18th August 2001)
3B7D830F
3B7D830B
3B7D8316
3B7D8314
3B7D831B
102,528
128,768
78,464
147,456
131,200
149,504
Windows XP
halsp.dll 3B7D831D (18th August 2001) 76,416 Windows XP and SP1
5.1.2600.1106 hal.dll
halaacpi.dll
halacpi.dll
halapic.dll
halmacpi.dll
halmps.dll
3D6DD5B1 (29th August 2002)
3D6DD5AE
3D6DD5AE
3D6DD5AE
3D6DD5AE
3D6DD5B1
101,376
127,872
77,440
146,560
129,920
148,352
Windows XP SP1
5.1.2600.2180 hal.dll
halaacpi.dll
halacpi.dll
halapic.dll
halmacpi.dll
halmps.dll
halsp.dll
41107B36 (4th August 2004)
41107B29
41107B28
41107B2E
41107B2D
41107B34
41107B36
105,472
131,968
81,280
150,656
134,400
152,704
77,696
Windows XP SP2
5.1.2600.5512 hal.dll
halaacpi.dll
halacpi.dll
halapic.dll
halmacpi.dll
halmps.dll
halsp.dll
48025183 (14th April 2008)
4802517F
4802517F
4802517F
4802517F
48025183
48025183
105,344
131,840
81,152
150,528
134,400
152,576
77,696
Windows XP SP3
5.2.3790.0 hal.dll
halaacpi.dll
halacpi.dll
halapic.dll
halmacpi.dll
halmps.dll
3E800035 (25th March 2003)
3E80002C
3E80002B
3E800030
3E800030
3E800035
103,936
108,544
78,336
116,736
110,592
117,760
Windows Server 2003
5.2.3790.1830 hal.dll
halaacpi.dll
halacpi.dll
halapic.dll
halmacpi.dll
halmps.dll
42435B3A (25th March 2005)
42435B35
42435B34
42435B34
42435B35
42435B3B
109,568
116,736
82,944
123,904
118,272
124,928
Windows Server 2003 SP1
5.2.3790.3959 hal.dll
halaacpi.dll
halacpi.dll
halapic.dll
halmacpi.dll
halmps.dll
45D6972F (17th February 2007)
45D69729
45D69729
45D6972A
45D6972A
45D6972F
109,658
118,272
82,944
125,440
119,808
126,464
Windows Server 2003 SP2
6.0.6000.16386 halacpi.dll
halmacpi.dll
4549AC9B (2nd November 2006)
4549AC9A
134,760
160,872
Windows Vista
6.0.6001.18000 halacpi.dll
halmacpi.dll
47918A38 (19th January 2008)
47918A38
141,880
177,208
Windows Vista SP1, Windows Server 2008
6.0.6002.18005 halacpi.dll
halmacpi.dll
49E018D9 (11th April 2009)
49E018D9
140,776
177,128
Windows Vista SP2
6.1.7600.16385 halacpi.dll
halmacpi.dll
4A5BBF07 (14th July 2009)
4A5BBF07
137,296
194,640
Windows 7
6.1.7601.17514 halacpi.dll
halmacpi.dll
4CE788D2 (20th November 2010)
4CE788D2
137,088
194,432
Windows 7 SP1
6.2.9200.16384 halmacpi.dll 5010ADD0 (25th July 2012) 319,216 Windows 8
6.3.9600.16384 halmacpi.dll 52158FAC (22nd August 2013) 337,248 Windows 8.1
6.3.9600.17031 halmacpi.dll 530888CC (22nd February 2014) 337,752 Windows 8.1 With Update
10.0.10240.16384 halmacpi.dll 559F3A8F (9th July 2015) 350,560 Windows 10

A self-extracting executable for Windows 2000 SP2 has been inspected for these notes but no HALs were found.

Where two or more Windows packges are listed for a set of files, the files with the same name in each package are the same, byte for byte.

The installation images for Windows Vista and higher each have a HAL that is simply named HAL.DLL but it is not built as HAL.DLL: it is already a copy of HALMACPI.DLL.

64-Bit Windows (x64)

All x64 builds of Windows so far have just the one HAL, named HAL.DLL.

Microsoft’s distribution of 64-bit Windows on MSDN discs is even less reliable than is my renewal of subscriptions. I seem never to have received a 64-bit edition of Windows XP, which is therefore not included in this study. Though correspondents tell me that 64-bit Windows Vista was readily available the moment that Windows Vista was released, my experience is instead that an MSDN subscription in 2007 produced no x64 build of the original Windows Vista. The copy inspected of that is from an OEM disc. Though all service-pack builds that have been inspected for this study are available through an MSDN subscription, the copies studied have instead been downloaded as self-extracting executables from Microsoft’s free websites since, for who knows what reason, the MSDN site that I pay for is intolerably slow—not that my tolerance is high, given that Microsoft leaves me to the tedium of burning disks and labelling them and has the nerve to tell me that doing so is environmentally friendly.

File Version File Header Date Stamp File Size Package
5.2.3790.1830 42435DCA (25th March 2005) 279,552 Windows Server 2003 SP1
5.2.3790.3959 45D6929B (17th February 2007) 279,040 Windows Server 2003 SP2
6.0.6000.20500 4588DB26 (20th December 2006) 269,928 Windows Vista
6.0.6001.18000 4791ACED (19th January 2008) 233,528 Windows Vista SP1, Windows Server 2008
6.0.6002.18005 49E04118 (11th April 2009) 233,448 Windows Vista SP2
6.1.7600.16385 4A5BDF08 (14th July 2009) 263,232 Windows 7, Windows Server 2008 R2
6.1.7601.17514 4CE7C669 (20th November 2010) 263,040 Windows 7 SP1
6.2.9200.16384 5010ABE8 (25th July 2012) 395,504 Windows 8
6.3.9600.16384 5215F8B9 (22nd August 2013) 418,144 Windows 8.1
6.3.9600.17031 530894F9 (22nd February 2014) 424,280 Windows 8.1 With Update
10.0.10240.16384 559F383E (9th July 2015) 425,824 Windows 10

Where two or more Windows packages are listed for the same build, the HAL.DLL files are the same, byte for byte. This identity is formalised for Windows 7 SP1 and Windows Server 2008 R2 SP1 since Microsoft provides the one self-extracting executable for both product names.