Registrations are now open. Join us today!
There is still a lot of work to do on the wiki yet! More information about editing can be found here.
Already have an account?

Microsoft KB Archive/100318

From BetaArchive Wiki
Knowledge Base

Why 16-Bit Windows Applications Run in Single VDM

Article ID: 100318

Article Last Modified on 11/1/2006


  • Microsoft Windows NT Advanced Server 3.1
  • Microsoft Windows NT Workstation 3.1

This article was previously published under Q100318


Windows NT provides a virtual MS-DOS machine (VDM) for all 32-bit Windows-based applications that acts as a complete environment for the application to run in. However, all 16-bit Windows-based applications run in a single VDM, sharing a single Win32 subsystem process. There are several reasons for this.

The VDM for 16-bit applications is actually a multithreaded Win32 application in which each 16-bit application runs in its own thread. This enables the Win32 subsystem to do sophisticated things like have a desynchronized message queue for 16-bit applications. This approach is much more general and portable; it yields excellent performance on RISC-based platforms and doesn't require any hacks at the device driver level.

Also, there are many applications that must run in a single VDM in order to function properly. Some examples are Microsoft Mail and Schedule+. They share common code and data structures via dynamic link libraries (DLLs); if run in separate VDMs they could seriously malfunction. It is difficult to tell in advance which applications are likely to break when run in separate VDMs, so this capability could be dangerous.

Multiple VDM awareness and the large amount of effort required to use the more complex and more powerful architecture working have made separate VDMs for 16-bit Windows applications a low priority, too low for the first release of Windows NT. However, it is understood, in limited circumstances, that a relatively sophisticated user could make very good use of separate 16-bit Windows VDMs. This feature will most likely be added to the second release of Windows NT. Even so, some of the problems stated above cannot be solved; there will be no guarantee that everything will work as it should. OLE (Object Linking and Embedding) version 2.0 is a good example of this because the 16-bit Windows implementation requires a great deal of code sharing via DLLs; this won't necessarily work across VDMs.

NOTE: As of Windows 3.5, Win16 apps in separate VDMs are supported in Windows NT version 3.5. The interface is this: If running the item in Program Manager, check "Run in Separate Memory Space" in the Program Item Properties dialog box. If you are starting from the command prompt, the "start" command now supports a /SEPARATE option.

Additional query words: prodnt access database dbase fox

Keywords: kbother KB100318