The Truth About VMM32.VXD
A HelpWithWindows TechFile
By Roy Lehrer
Everything in this article applies to all versions of Windows 9X including the recently released Windows 98 Second Edition versions.
Rumors:
Before I go into the details of telling you how to rebuild a corrupt vmm32.vxd file, let me first say with very strong emphasis that there is no truth to the reports that Win9X does not install all required *.vxd files during installation. While it's possible that such a bug may have existed in a very early Win98 beta release (going back to when it was called Memphis and not Win98), there is no such bug, nor has there ever been such a bug in any released version of Win95 thru Win98 Second Edition.
There are various web sites where you can read about this non-existent bug that I think is plain hogwash. My experience says that such sites are incorrectly informing you that during Win9X installation, some required *.vxd files do not get installed and that you have to install them yourself manually, and that these "missing" files are the cause of at least some of your problems. Again I say hogwash. Some of these sites go on even further to tell you that you can check to see if any *.vxd files are missing by using Device Manager (from System Manager in the Control Panel) and using the Driver File Details tab and that if you find entries containing 'vmm32', there's a good chance you need to extract and then install these files manually. Some go on to more explicitly tell you that if you see entries that look like C:\Windows\System\vmm32.vxd (configmg.vxd) that you do have to extract the *.vxd file manually from your Win98 CD cab files and put them in your \Windows\system\iosubsys directory after which the Driver File Details will show C:\Windows\System\configmg.vxd which is the correct way an entry should look.
As I just said I think this whole issue is just plain old-fashioned hogwash. Someone who doesn't/didn't have the slightest idea of what vmm32.vxd is or how it is used probably originated it. And as we all know, anything posted on the web spreads like wildfire and is taken to be gospel by many even if it shouldn't. A more forgiving reason (it you want to call it that), although unlikely based on the details of what is being said, is that a person whose vmm32.vxd file got corrupted started it. But even then he/she didn't know what they are talking about if they are saying a bug in Win9X prevents the *.vxd files from getting installed.
What is VMM32.VXD:
To try and explain why what these sites tell you is wrong, you need to know what vmm32.vxd is. Vmm32.vxd is a monolithic driver file made up of a number of various *.vxd files. It is a W4 format archive using the MRCI compression of Drivespace. However, to keep things simple, you can think of it as a archive of different *.vxd files combined into one library file that can loaded as one file but that the individual files within it can be used as if they were individually loaded. Basically vmm32.vxd just contains a collection of different *.vxd files your system needs for startup, each file is stripped of the headers that are required if that same file was loaded separately. Between the stripped headers and the compression used in vmm32.vxd it is considerably smaller that all the individual files, contributing to its faster load time. One of the most important things about vmm32.vxd is that the actual *.vxd files it contains is determined for each system on an individual basis during the original Win9X installation to that system, and that the vmm32.vxd file on one system may be quite different than the one on another system. So if your file gets corrupted you can't just copy the one from you buddy's system and expect it to work unless his system was 100% identical to yours at the time you each installed the exact same version of Win9X. You also have to know that the vmm32.vxd file that can be extracted from the Win9X cab files is just a skeleton file that is used to build upon during the Win9X installation process, so just extracting it will not restore a corrupted vmm32.vxd file. If you did extract vmm32.vxd from your cab files and overwrote the one in your \Windows\system directory with it, the result would be a system that you could not start Win9X on.
So to reiterate, the files these web sites claim are missing are not missing, they are actually part of vmm32.vxd, which is why you normally will not find them as individual files on your system. The fact that users could not find these files on their system may have led to the acceptance that they Win9X did not install them. By the way, the Device Manager, Driver File Details type of entry that reads something like C:\Windows\System\vmm32.vxd (configmg.vxd) is absolutely correct. It is telling you that the driver being used is configmg.vxd but that is it loaded from vmm32.vxd instead of as a stand-alone file. If it were loaded from a stand-alone file then the entry would read C:\Windows\System\configmg.vxd.
Now there may come a time, when one of the *.vxd files built into vmm32.vxd needs to be updated, and Win9x provides a very simple means for this. Each system has a \Windows\system\vmm32 directory. Any *.vxd file in this directory will be automatically loaded and used during Win9X startup, instead of the one in the vmm32.vxd file if it exists in both places. In other words files in this directory take precedence over same files within vmm32.vxd. So when these web sites have you put the individual files in this directory all they are doing is putting a copy of the same code that is already within vmm32.vxd into this directory as stand alone files which will actually cause Win9X to take longer to load. Microsoft says that Extracting system files that are rolled into VMM32.VxD will not increase system performance, once you are started, there will be no difference. The reason for bundling VxD's into VMM32 was to improve system boot time.
To see a list of all the files included in your vmm32.vxd file use regedit.exe and go to the key HKEY_LOCAL_MACHINE \ System \ CurrentControlSet \ Control \ VMM32Files. All files listed in the right side of the display are within your system's personalized copy of vmm32.vxd.
As you may have gathered, since the VMM32.VXD in use on your system was custom created for you system based on its requirements, it is one file that you cannot simply extract from your Win98 cabs files if it should become corrupt or if it accidentally gets erased from your system. So RIGHT NOW is a good time to stop reading and make a backup copy of it in case you ever need it.
Why would you ever need to rebuild:
I can only think of two reasons for needing to re-build your vmm32.vxd file. The first is because your current copy is no longer usable or was deleted. So as I said just above, back it up now and you don't have to worry about this.
The other reason may be that at some point in time due to updates, etc, you may have a large number of updated *.vxd files in your \Windows\system\vmm32 directory and would like to return to having the files load via the faster loading vmm32.vxd. Personally I don't think that the load time difference is worth the effort but since vmm32.vxd can be rebuilt I will tell you how.
Procedure:
Notes:
- Some of the steps only tell you what needs to be done and not how to do it. If you don't know how to do it, then I suggest that you should re-consider attempting this procedure.
- In this archive are samples of what the 2 batch files you are going to create should look like. As written they may not be appropriate for your system, so please follow the steps below to create batch files for your system, and use the samples only as a guide to what your completed batch files should look like.
- The entire procedure can be run from within the Win9X GUI, there is no need to start in Real Mode DOS, as is the case with the earlier version of this procedure.
- Note that in my examples in some of the steps, I only show 3 entries for file lists that will be much larger (probably 40 or more lines). Also for these batch files you will be creating case does not matter.
- First you must know what files are in your current vmm32.vxd file. You can get a list from the registry at HKEY_LOCAL_MACHINE \ System \ CurrentControlSet \ Control \ VMM32Files. Since the list is rather long, and because this procedure involves creating a batch file using this list of file names, the easiest thing to do is export this key to VMM32.REG
- Open VMM32.REG in any editor that you want. An editor with Search and Replace (abbreviated as S&R in this procedure) capability is best (thus NotePad will not do, but WordPad will). The steps in this procedure are written to take advantage of S&R. The editor you use must allow you to save the results to an ASCII text file.
-
Delete the first few lines so that you are left with a list that looks something like the following:
- "biosxlat.vxd"=hex:00
- "combuff.vxd"=hex:00
- "configmg.vxd"=hex:00
- Save what you have so far as WININIT.INI, which we use later in this procedure.
-
Now continuing editing VMM32.REG and using S&R enter "=hex:00 (Note the leading quote mark in this text) as the search string and leave the replace text blank and then do a Replace All. You should now have a list that looks something like:
- "biosxlat.vxd
- "combuff.vxd
- "configmg.vxd
-
Now replace all occurrences of " (a single quote mark) with one of the following text strings:
- extract /a /y H:\win95\win95_02.cab (for Win95 users)
- or
- extract /a /y H:\win98\base4.cab (for Win98 users)
- Note: In the above commands you have to change H:\win95 or H:\win98 to the actual path that your Win9X cab files can be found at whether it be a CD directory or some HD directory. Also note that there needs to be a SPACE at the end of the replace string. When you have completed this step your file needs to look similar to:
- extract /a /y H:\win98\base4.cab biosxlat.vxd
- extract /a /y H:\win98\base4.cab combuff.vxd
- extract /a /y H:\win98\base4.cab configmg.vxd
-
Now ADD the following 5 lines to the TOP of the file:
- @echo off
- c:
- cd \windows\system
- extract /a /y H:\win98\base4.cab vmm32.vxd
- cd \windows\system\vmm32
-
Now ADD lines similar to what's below to the END of the file. The purpose of these lines is just to give you some sort of an on-screen message when GETVXD.BAT finishes so that you will know it, and also know that it is OK to close the Dos Window that will be left open:
- cls
- echo extraction of files is complete, it's ok to close the dos window now.
- Now compare your list of file of files to be extracted to those files that currently exist in your \Windows\system\vmm32 directory. If any files in your list already exist in this directory chances are that they are newer versions than what is on your CD. It is up to you to determine this. If you determine that the version of a file in your \Windows\system\vmm32 directory is newer than what is in your cab files, then Delete that entry from the list because we don't want to overwrite a newer version already existing in the directory with an older one that will be extracted from your cab files.
- Save your work as GETVXD.BAT
- Load the WININIT.INI saved in step 4 into your editor.
-
Using S&R enter "=hex:00 (Note the leading quote mark in this text) as the search text and for the replacement text enter =c:\windows\system\vmm32.vxd (adjust the drive\path if necessary) and then perform a Replace All. You should now have a list that looks something like:
- "biosxlat.vxd=c:\windows\system\vmm32.vxd
- "combuff.vxd=c:\windows\system\vmm32.vxd
- "configmg.vxd=c:\windows\system\vmm32.vxd
-
Using S&R enter " (a single quote mark) as the search text and c:\windows\system\vmm32\ (adjust drive\path if necessary) as the replacement text and perform a Replace All. You should now have a list that looks something like:
- c:\windows\system\vmm32\biosxlat.vxd=c:\windows\system\vmm32.vxd
- c:\windows\system\vmm32\combuff.vxd=c:\windows\system\vmm32.vxd
- c:\windows\system\vmm32\configmg.vxd=c:\windows\system\vmm32.vxd
-
At the TOP of the file add a section header of [SetupOptions] and under it Combine=1, Under this add another section header of [CombineVxDs]. Your file should now be similar to:
- [SetupOptions]
- Combine=1
- [CombineVxDs]
- c:\windows\system\vmm32\biosxlat.vxd=c:\windows\system\vmm32.vxd
- c:\windows\system\vmm32\combuff.vxd=c:\windows\system\vmm32.vxd
- c:\windows\system\vmm32\configmg.vxd=c:\windows\system\vmm32.vxd
- Once you have your file looking like the above example save it keeping the name WININIT.INI
- Move WININIT.INI and GETVXD.BAT from wherever you saved them with your editor to your \Windows directory
- Although not required for the rest of the procedure to work, I strongly suggest that you backup any files that already exist in your \Windows\system\vmm32 directory as well as your current vmm32.vxd file and your current registry. How you backup these files is up to you.
- In the Start > Run dialog enter GETVXD and click on OK to start the batch file which should log you on to the HD that contains Win9X, change to the appropriate directories and extract all file to these directories, automatically overwriting any files that exist with the same filename. Depending on your system speed this batch file may take a while to execute due to the simple way it was written which caused only one file to be extracted from the cabs at a time. I don't think you will be using this batch file often enough to worry about combining filenames on an extract command line to save a little time by extracting multiple files at a time.
- Restart Win9X and during the startup process, WININIT.INI will be processed. While wininit.ini is being processed you will get a Please wait while Setup updates... message on your screen, as the new vmm32.vxd file is created from the individual files in the \Windows\system\vmm32 directory. During the process, all files combined into vmm32.vxd will be deleted from the \Windows\system\vmm32 directory leaving only those that do not belong in vmm32.vxd (were not listed in your wininit.ini file) which should have been there before starting this procedure.
That's it, you should have re-built your vmm32.vxd file. If everything is working, BACKUP your new vmm32.vxd file now, so if anything happens to it you don't have to repeat this procedure.
What if I can't start Win9X or have other problems:
Recovery is quite simple if you followed my suggestion to make backups. All you should have to do is replace \Windows\system\vmm32.vxd and delete any files in the \Windows\system\vmm32 directory that were not there when you started. If you made backup, then you should be able to delete everything in this directory and just restore it from your backup. The procedure causes NO changes, additions or deletions to your registry, so you should not need to restore it. However if you can't start Win9X, then you did something wrong and since regedit.exe was used you may have accidentally corrupted your registry and if this is the case you may have to restore it from you backup. So you can either do it now or wait and see if it is required after you attempt to restart Win9X after restoring your original vmm32.vxd and \Windows\system\vmm32 files.
Microsoft Knowledge Base Articles
Here are some Microsoft Knowledge Base Articles dealing with VMM32 errors:
- Windows 95/98 Boots Directly to "Shut Down" Screen - 141898
- Missing or Damaged Vmm32.vxd File in OSR2.1 Setup - 167889
- ErrMsg: VMM32.VXD: Missing/Unable to Load - 191874
- Error Message: VMM32.VXD Is Required to Run Windows... - 194679
- Err Msg: Invalid VxD Dynamic Link Call from VPOWERD(06)... - 194999
- Computer Stops Responding After You Press CTRL+ALT+DELETE - 195164
- Digital Sound System: Windows Is Unable to Detect DSS80 Speakers - 220821
- You receive an "Unpacking Vmm32.vxd, library invalid or wrong version" error message when you start Windows 98 - 296579