Article ID: 100318 - View products that this article applies to.
This article was previously published under Q100318
This article has been archived. It is offered "as is" and will no longer be updated.
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.