An installation of DOS (e.g. MS-DOS 5.0) will typically include a statement in its CONFIG.SYS such as DEVICE=C:\DOS\HIMEM.SYS.

When installing Windows 3.1, it's setup comments (REMs) that line out, and adds DEVICE=C:\WINDOWS\HIMEM.SYS instead.

Presumably there is some material difference between these two files for the setup to make this modification. What does the Windows version do that the DOS one doesn't?

(This question is prompted in part by an Aleph One expansion card for Acorn Archimedes machines, which adds hardware support for running PC software under RISC-OS. Loading the DOS version of HIMEM.SYS results in an unstable system, but the Windows version works correctly, even when running DOS. A forum discussion about these symptoms can be found here.)

2 Answers 2


Different versions of MS-DOS and Windows shipped with different versions of HIMEM.SYS:

  • Windows/286 2.10: HIMEM.SYS 1.1 (not an XMS driver)
  • Windows/386 2.10, Windows 2.11: HIMEM.SYS 2.04
  • Windows 3.0: HIMEM.SYS 2.60
  • MS-DOS 5.0: HIMEM.SYS 2.77
  • Windows 3.1: HIMEM.SYS 3.07
  • MS-DOS 6.2 and later, Windows for Workgroups 3.11: HIMEM.SYS 3.10

(See KB74977 and KB84388 for some of these.)

The major difference between MS-DOS 5.0’s version of HIMEM.SYS and Windows 3.1’s is in the major version: HIMEM.SYS 2.x implements version 2.0 of the XMS, HIMEM.SYS 3.x implements version 3.0.

I don’t have details off-hand of all the changes between these versions, but KB84388 mentions that version 2.77 only provides access to 16MiB of RAM (XMS 2.0 is limited to 64MiB), whereas 3.07 can detect up to 4GiB and make use of up to 1GiB (although Windows 3.x can’t use that much). This limitation is actually a Windows 3.0 limitation, inherited from the 286’s 24-bit descriptors — Windows 3.0 only supports 16MiB of RAM and “relies on the XMS driver to enforce this limit.” There are presumably other differences, including bug fixes and possibly better support for certain systems.

Older versions of HIMEM.SYS were made available with source code, but I don’t think that was still the case with the versions shipped in Windows 3.0 or later. There might be a list of changes somewhere on the Internet but it escapes me just now. Some changes can be gleaned from Microsoft knowledge base articles; for example, version 2.77 added a switch to reserve memory for the interrupt 0x15 interface.


There are no differences, except to the version number.

The drivers are a various package distributed with DOS, Windows, and some compiler utilities. It is possible to use later ones, and even earlier ones.

You can see from this table, that the versions have been generally updated through time. Value in (brackets) are reported from the emulation, value in sq brackets [] are period OEM versions supplied with cdrom etc.


The major version (2, 3) are some standard supported. More features were added to 3, which is why EMSMAGIC patches the NT version of himem.sys. The minor features are bug fixes. PC-DOS 5.0 and Windows 3.00 have version 2.77, but in updates to this (and also in MS-DOS 5.00a), this was updated to 2.78.

The version numbers are intended also to see if the program should update your version. So if it were doing its job properly, it would not point your himem line to 2.77 if you already have 3.10.

It is for this reason that Windows 9x has a subversion of .95. It's a higher number than even 3.15 (the PC-DOS 7 version). Windows 9x emulates mouse 8.3, so you would not install 8.2, but can install 9.0.

You find other versions of himem.sys etc in other software, the programming languages supply versions of these.

                  HIMEM   EMM386    RAMDRV    SMARTDRV  MOUSE   MSCDEX
  WINNT           (2.77)                                (8.00)   (2.21)
  MS-DOS  5.00     2.78    4.33      3.06       3.13     8.20    [2.21]
  Windows 3.11     3.07    4.44      3.06       4.00     8.20    [2.21]
  MS-DOS  6.00     3.07    4.45      3.06       4.10     8.20     2.22
  PC-DOS  6.10     3.09    4.45      3.06       4.10     8.20     
  PC-DOS  6.30     3.09    4.48      3.06       5.00     9.01     2.23
  MS-DOS  6.20     3.10    4.48      3.07       5.00     8.20     2.23
  Win/W   3.11     3.10    4.49      3.07       5.00     8.20     2.23
  MS-DOS  6.22     3.10    4.49      3.07       5.01     8.20     2.23
  PC-DOS  7.00     3.15    4.50      3.10       5.10     8.20     2.25
  Windows  95      3.95    4.95      3.06       5.00    (8.30)    2.25
  Windows  98      3.95    4.95      3.06       5.02    (8.30)    2.25
  Windows  ME     (3.99)   4.95      3.06       5.02    (8.30)    2.25
  PC-DOS 7.10      3.15                                           2.25

There are three different versions of IBM mouse 8.20, the remaining mouse.com are identical to the retail versions.

You can use these utilities with any version of DOS. For example, the Win98SE versions run as stated under PC-DOS 5 or MS-DOS 5. The requirement is 3.3 or later.

The differences appear to be bug-fixes and optimising. Windows NT for example, uses an emulated version of (8.00) here.


From a very early stage, I figured that the files liste above were not 'part' of DOS or Windows, but rather different drivers distributed with whatever the package was going out the door.

In the days of the 286, HIMEM and EMM286 were often distributed with the card, and often specific to it. In a similar way, MOUSE, MSCDEX, came with these devices. SMARTDRV and RAMDRIVE were more software drivers, but were dos- independent.

HIMEM supports quite a number of machines, as can be seen in the help on the subject. It has a DOS-side that supports a growing portion of XMS 2,x and 3,x interfaces, and a HW-side that supports a range of previous machines. Faults and implementations on either side could give rise to a new version, although the major versions supported a more extensive interface.

EMM386 supports a different range of interrupts etc, that Lotus, Intel and Microsoft agreed on. Like HIMEM, there are programs that support this, and it involves a bit of poking around in RAM.

Windows only uses HIMEM.SYS 2.77 on the DOS side, and VMM.vxd looks after memory on the windows side. In effect, Windows grabs all of the DOS memory, and VMM is responsible for allocating XMS bits to windows. This is the same version number reported under Windows 9x, NT and OS/2.

Reading the documentation on EMM support given by the likes of EMSMAGIC and VEMM.SYS, these programs exist because EMM was not carried through, but preserved for backwards compatibility. EMSMAGIC even goes as far as to extend the XMS support in Windows past 2,77, to allow such DOS programs that need it to run.


I am not so much a programmer, but a 'power-user' and OS/collector. As part of the fun, it is possible to see that there is in the retail box, not just DOS, but a range of drivers and utilities (licenced from third-parties), as a bundle. The same retail upgrade DOS, for example is packaged as 'DOS and additional tools'.

The price paid per OEM copy depends on how many 'additional tools' are included. IBM negotiated a deal with one of their OEMs to supply DOS without QBASIC/EDIT at a reduced rate. On the same basis, IBM did not buy Microsoft's additional tools.

Because the drivers and additional tools serve as marker files, it gives a bit of insight into what is on the distribution. For example, the MSD 2.0x files were released when IBM had access to the code. 2.00 is in Windows, 2.01 is in DOS 6, both MS-DOS and the oldest PC-DOS 6.00 beta. 2.1x did not appear until after IBM had no access to the new code, ie D 6.22 and W 3.11. Likewise, we see that PC-DOS 6.30 of 1993-12-31 has the retail 9.01 mouse driver, but an OEM version a month later reverts to IBM's 8.20 version.

Other versions of these drivers appear in different retail packages, along with boxed hardware. Mouse 8.20 contains something like a dozen extra files, including panels for controling mouse.ini under DOS and Windows 3.1. These are not in the OS versions.

  • 6
    In your first sentence you say "there are no differences", yet you start your last paragraph by saying "The differences appear to be bug-fixes and optimising". So are there any differences?
    – Kaz
    Commented Nov 5, 2020 at 15:06
  • The major version implements the standard, and the minor ones are bug fixes. Commented Nov 6, 2020 at 0:36
  • 1
    I'm still not clear what your overall answer is. As HIMEM.SYS went from version 2.78 to 3.07 with Windows 3.1, that'd be a major version change. Can you give examples of what changed with this update?
    – Kaz
    Commented Nov 7, 2020 at 6:00
  • The first digit represents the supported standard. 3.xx supports more functions than 2.xx. EmsMagic patches the nt versíon to allow extra functionality. ? Commented Nov 8, 2020 at 5:25
  • Most versions of DOS and Windows came with the 'latest' version, variously upgraded. Windows 3.00 came with 2.60, but this is upgraded to 2.77 in DOS and Windows 3.0. This is the highest value of xms used in the Windows environment, although some dos programs use functions found in vers 3.xx. Some versions simply patch bugs, or support new hardware, without any noticable effect. In the time these were being released, we just installed whatever was latest, so we didn't really notice. Commented Dec 1, 2020 at 9:31

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .