Why didn’t Windows 95 suck the brains out of the XMS driver?

Raymond Chen

In the discussion of the MS-DOS game that required 32 XMS handles, it was suggested that a solution to the problem of figuring out which handles could be used as local handles without conflicting with existing global handles was to suck the brains out of the XMS driver, and thereby have full information about all the outstanding handles. From there, Windows 95 could create new handles that were guaranteed not to conflict with existing handles.

Windows 95 used Windows 3.1 as its starting point, and the way Windows 95 took over from the MS-DOS XMS driver matches the way Windows 3.1 did it. Windows 3.1 had to be able to coexist with third party XMS drivers, so it took a conservative approach. There was in fact a “brain dump” interface for sucking the brains out of the real-mode driver, and if the MS-DOS XMS driver supported it, Windows 3.1 used the “brain dump” interface as a shortcut to the “allocate all the remaining XMS handles” loop. On the other hand, it didn’t go the extra mile and use this information to manufacture new local XMS handles because there was no scenario that required it.¹

There were no major applications that would have taken advantage of having a larger set of local XMS handles, probably because the XMS specification itself cautioned programs that the number of XMS handles is limited and programs should use a small number of large XMS blocks instead of a large number of small XMS blocks. Programs which followed the recommendation of the XMS specification would not have benefited from a large number of local XMS handles, which meant that there was little demand for a large number of local XMS handles.

Furthermore, all of the Windows 3.1 protected-mode kernel was written in assembly language, so there was a natural reluctance to go in and make large changes of marginal benefit. I was responsible for the Windows 95 XMS driver, and there were things in that driver that really needed to be done, but adding support for more local XMS handles was not one of them.

That’s why Windows 95 didn’t try to be awesome about local XMS handles. So far, in all of the application compatibility investigations, only one application would have benefited from it, and there was already a workaround that people were comfortable with: Run the game in MS-DOS mode.

¹On the other hand, Windows 3.1 happily took advantage of the brain dump interface for the expanded memory driver because a lot of important programs used expanded memory and would take advantage of more such memory if it were available. Adding more expanded memory was such a big deal that people actually spent real money buying expansion cards whose sole purpose was to add more expanded memory to your PC.