Virtuele DOS machine
Met een virtuele DOS-machine (VDM) kunnen de gebruikers van computers 16-bit of 32-bit DOS en 16-bit Windows-programma's uitvoeren op 32-bit computers wanneer er al een ander besturingssysteem gebruik maakt van de hardware.
Overzicht
Virtuele DOS-machines gebruiken gewoonlijk de virtuele 8086-modus van de Intel 80386 (of later) processor, waardoor veel 8086-toepassingen kunnen functioneren door de commando's van het besturingssysteem zo te vertalen dat toepassingen denken dat ze op een 8086 draaien. Het besturingssysteem kan dan de DOS-software emuleren.
VDM's zoals Windows 3.x 386 Enhanced Mode kunnen ondersteuning toevoegen voor het gebruik van 16-/32-bit protected mode software als ze de DOS Protected Mode Interface (DPMI) gebruiken.
Als een DOS-programma in een VDM een randapparaat moet gebruiken, geeft Windows het DOS-programma een virtueel apparaatstuurprogramma (VDD) dat de hardware emuleert met commando's die het besturingssysteem waarop het draait kan begrijpen.
DOS VDM's
DOS VDM's verschenen op Windows/386 2.01 in 1987 en zaten ook in Windows 3.x, als je 386 Enhanced Mode gebruikte, en in 95, 98, 98 SE en Me.
Vergelijkbaar met Windows 3.x kan je met VDM veel DOS applicaties tegelijk draaien als je de EMM386 /MULTI optie gebruikt. Digital Research / Novell werkte sinds 1991 aan een soortgelijk systeem onder de codenaam "Vladivar" (oorspronkelijk een apparaatstuurprogramma KRNL386.SYS en geen onderdeel van EMM386). Het werd gemaakt voor de volgende versie van DR DOS, uitgebracht als Novell DOS 7 in 1994, maar het werd ook gebruikt in hun "Star Trek" project, waar ze mee stopten voordat ze klaar waren.
OS/2 MVDM
VDM's genaamd MVDM (Multiple Virtual DOS Machine) worden gebruikt in OS/2 2.0 en later. OS/2 MVDM's zijn in veel opzichten beter dan NTVDM, bijvoorbeeld met blokapparaten. Terwijl OS/2 1.x DOS 3.0 emuleerde, emuleerde 2.x DOS 5.0.
Het draaien van Windows 3.1 toepassingen in OS/2 lijkt op de XP Mode in Windows 7, maar de gebruikte technologieën zijn zeer verschillend. Een "gast" VDM staat programma's toe de schijven te gebruiken van het OS/2 of NT besturingssysteem waarop de VDM draait. Toepassingen in een VDM kunnen named pipes gebruiken om met hun "host" te praten. []
Windows NTVDM
NTVDM is opgenomen in alle x86-versies van Windows gemaakt op NT, en laat 16-bit Windows en 16-/32-bit DOS-toepassingen draaien. Het is niet inbegrepen bij 64-bit versies (zie Beperkingen). ntvdm.exe helpt de API's emuleren die nodig zijn om 16-bit DOS- en Windows-toepassingen te draaien.
NTVDM gebruikt NTIO.SYS en NTDOS.SYS, dat een gewijzigde versie van COMMAND.COM uitvoert. De 16-bits systeembestanden zijn kleinere versies van hun MS-DOS 5.0 tegenhangers, waaronder IO.SYS, MSDOS.SYS en COMMAND.COM, die vooroordelen met het FAT-bestandssysteem wegnemen en indien nodig ook het 32-bits NTVDM kunnen aanroepen. NTDOS gaf oorspronkelijk een DOS-versie van 30.00 aan programma's, maar dit werd al snel veranderd in 5.00 om meer programma's te laten draaien zonder te worden veranderd Er zijn echter veel nieuwere MS-DOS functies en commando's toegevoegd aan MS-DOS versies 6.x en in Windows 9x die er niet zijn.
16-bits programma's draaien afzonderlijk binnen één 32-bits NTVDM-proces. Door "In aparte geheugenruimte uitvoeren" aan te vinken in het dialoogvenster Uitvoeren of in de snelkoppeling van het programma wordt een nieuw proces aangemaakt. NTVDM emuleert BIOS-functies, de Windows 3.1-kernel en zijn 16-bits API.
32-bits DOS-emulatie wordt gebruikt voor DPMI en het gebruik van 32-bits geheugen. wowexec.exe is het emulatieproces voor 16-bits Windows. Windows 2000 heeft Sound Blaster 2.0-emulatie toegevoegd aan 32-bits NTVDM. 16-bit en DOS virtuele apparaatstuurprogramma's kunnen niet worden uitgevoerd. Win16-programma's kunnen met andere delen van Windows communiceren via OLE, DDE en named pipes.
Omdat virtuele 8086 mode niet beschikbaar is op niet-x86 processoren, was NTVDM een volledige emulator voor NT op deze architecturen. NT 3.51 kon alleen 80286, maar sinds NT 4.0 werd 486 emulatie toegevoegd.
Veiligheidsvraagstukken
In januari 2010 ontdekte Google beveiligingsonderzoeker Tavis Ormandy een groot beveiligingsprobleem in het NTVDM systeem waardoor niet-beheerders hun rechten konden verhogen naar het SYSTEM niveau. Ormandy beweerde dat het een probleem was voor alle x86 versies van Windows NT na 1993. 32-bit versies van NT 3.X/4.0, 2000, XP, 2003, Vista, 2008 en 7 werden getroffen. Ormandy publiceerde hoe het probleem werkt. Voordat Microsoft het kon oplossen, kon je 16-bit applicatie ondersteuning uitschakelen om het probleem op te lossen, maar het maakte dat je geen 16-bit programma's kon draaien. x64 Windows had dit probleem nooit omdat het geen NTVDM gebruikt. Na het toepassen van de beveiligingsfixes die Microsoft beschikbaar stelde, kon NTVDM veilig worden ingeschakeld.
Beperkingen
NTVDM en wowexec hadden beperkingen op Windows XP en later vanwege een GDI-objectlimiet per sessie, waardoor GDI-handgrepen mogelijk twee bits naar rechts werden verplaatst bij het veranderen van 32 naar 16 bits. Handvatten konden dus niet groter zijn dan 14 bits, dus 16-bits programma's met een GDI-handvat groter dan 16384 zouden crashen.
Op x86-64 CPU's is de virtuele 8086-modus alleen beschikbaar als legacy-submodus (als u een 32-bits besturingssysteem draait), maar niet in de 64-bits lange modus. Daarom wordt NTVDM niet meegeleverd met 64-bits versies van Windows, zodat 16-bits toepassingen niet kunnen worden uitgevoerd op 64-bits Windows. U hebt Windows XP Mode of soortgelijke virtualisatiesoftware nodig om 16-bits programma's uit te voeren in een 64-bits besturingssysteem.
NTVDM kan geen DOS-spelletjes draaien op hedendaagse computers. Emulatie is alleen voorzien voor eenvoudige randapparatuur. Geluid in NTVDM kan bijvoorbeeld beperkt zijn. Windows NT ververst het scherm slechts een paar keer per seconde wanneer DOS programma's erop schrijven, en ze kunnen geen hoge resolutie grafische opties emuleren. Omdat software op de snelheid van de CPU draait, stoppen alle timing loops te vroeg. Dit laat spellen te snel lopen, of zorgt ervoor dat de software sommige geëmuleerde hardware randapparatuur niet ziet, omdat het niet zo lang kan wachten op een antwoord.