Loading Base Drivers Specified in the Registry

VMM32 examines the registry branch SYSTEM\CurrentControlSet\Services\VxD and enumerates all keys under this branch. ("Enumerate" here refers to the enumeration of registry keys, not to Plug and Play enumeration.) If it finds a value "StaticVxD=", it will load that static VxD and execute its real mode initialization portion. For example:

SYSTEM\CurrentControlSet\Services\VxD\V86MemoryManger
         Description=MS-DOS Virtual 8086 Memory Manager
         Manufacturer=Microsoft
         StaticVxD=*V86MMGR
         Start=0
         EMMEXCLUDE=E000-EFFF
 SYSTEM\CurrentControlSet\Services\VxD\ConfigMG
         Description=Plug and Play Configuration Manager
         Manufacturer=Microsoft
         StaticVxD=*CONFIGMG
         Start=0
 SYSTEM\CurrentControlSet\Services\VxD\IOServices
         Description=IO Services Driver Version 4.0
         Manufacturer=Microsoft
         StaticVxD=*IOS
         Start=0
 

Entries exist in this section of the registry for every VxD that is not directly associated with any hardware. These drivers used to be specified under [386ENH] in SYSTEM.INI. Examples of these devices are DOSMGR, V86MMGR, Reboot, VMPoll, and BiosXlat.

Device specific information can be stored in the registry under the same key as the driver. In the preceding example, the V86MemoryManager key contains the value EMMEXCLUDE=E000-EFFF, which is a setting specific to the V86MMGR VxD. Any other VxD-specific information can be grouped with the driver it is associated with in the same way. VxDs can use the VMM services _GetRegistryKey or _GetRegistryPath to discern the location from which they were loaded, and then use this information to read any associated values. Although loading VxDs from SYSTEM.INI (and the associated ReadProfileString and WriteProfileString functions) will still be supported for compatibility with older drivers and setup programs, driver writers are encouraged to use this location and load method for new VxDs and associated switch settings.