Why 16-Bit Windows Applications Run in Single VDM

Last reviewed: May 6, 1997
Article ID: Q100318
The information in this article applies to:
  • Microsoft Windows NT operating system version 3.1

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 nt16ap ntgeneral
Version : 3.1
Platform : WINDOWS


THE INFORMATION PROVIDED IN THE MICROSOFT KNOWLEDGE BASE IS PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND. MICROSOFT DISCLAIMS ALL WARRANTIES, EITHER EXPRESS OR IMPLIED, INCLUDING THE WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL MICROSOFT CORPORATION OR ITS SUPPLIERS BE LIABLE FOR ANY DAMAGES WHATSOEVER INCLUDING DIRECT, INDIRECT, INCIDENTAL, CONSEQUENTIAL, LOSS OF BUSINESS PROFITS OR SPECIAL DAMAGES, EVEN IF MICROSOFT CORPORATION OR ITS SUPPLIERS HAVE BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. SOME STATES DO NOT ALLOW THE EXCLUSION OR LIMITATION OF LIABILITY FOR CONSEQUENTIAL OR INCIDENTAL DAMAGES SO THE FOREGOING LIMITATION MAY NOT APPLY.

Last reviewed: May 6, 1997
© 1998 Microsoft Corporation. All rights reserved. Terms of Use.