Het weinig bekende winstart.bat batchbestand

In Windows 95 kon je een winstart.bat-bestand maken in je Windows-map. Tijdens het opstarten initialiseert de virtual machine manager (VMM) en creëert deze de zogenaamde "Systeem virtuele machine" (de "System VM"). Dit is de virtuele machine waarin alle Windows-programma's draaien. Voordat de user-mode kernel in die virtuele machine wordt gestart, voert de VMM het winstart.bat-batchbestand uit, mits dit bestaat.

Het opstartproces in stappen

Het proces verloopt als volgt:

  1. MS-DOS start op: De computer start op in MS-DOS en toont de opdrachtprompt. In dit stadium zijn er diverse elementen aanwezig op lage adressen, zoals de interrupt vector table en het BIOS-data-area.
  2. Uitvoering van autoexec.bat: command.com voert autoexec.bat uit, wat bijvoorbeeld kan worden gebruikt om TSR's (Terminate and Stay Resident-programma's) te installeren.
  3. Initialisatie van Windows: Windows start op en initialiseert de virtual machine manager. Het systeem draait nu in protected mode met een virtuele machine die in v86 mode werkt. Deze virtuele machine is geïnitialiseerd met alles wat op dat moment in real mode draaide voordat de VMM het beheer overnam.¹
  4. Uitvoering van winstart.bat: Op dit punt voert de VMM het bestand winstart.bat uit binnen de virtuele machine. Hier kan eventueel een extra TSR worden geïnstalleerd. De VMM neemt hierbij de verantwoordelijkheid voor het bestandssysteem over en schakelt het real-mode bestandssysteem van MS-DOS uit.
  5. Starten van de Windows GUI: Vervolgens wordt de user-mode kernel gestart die verantwoordelijk is voor Windows-applicaties. Deze kernel schakelt de virtuele machine over naar protected mode en start datgene wat de meeste mensen beschouwen als "Windows".

De interactie met de opdrachtprompt

Wanneer je vanuit de Windows GUI besluit een opdrachtprompt te openen, wordt er een tweede virtuele machine aangemaakt.

Het is belangrijk om op te merken dat de virtuele machine die command.com draait, een kopie is van het systeem zoals dat was op het moment dat Windows startte.² Dit betekent dat deze machine wel de TSR's bevat die via autoexec.bat zijn geladen, maar niet de TSR's die via winstart.bat zijn geladen. Als je vervolgens een TSR installeert in deze specifieke opdrachtprompt-virtuele machine, is deze alleen binnen die machine zichtbaar.

Het doel van winstart.bat

Het beoogde doel van het winstart.bat-batchbestand is om TSR's te kunnen installeren die uitsluitend gelden voor Windows-programma's.

Een voorbeeld hiervan is het installeren van netwerkdrivers ter ondersteuning van Windows-programma's. Men zou voor deze optie kunnen kiezen in plaats van een globale installatie als:

  • Netwerken niet nodig zijn voor MS-DOS-programma's, waardoor conventioneel geheugen vrijblijft voor die programma's.
  • De drivers niet ondersteunen om in meerdere virtuele machines tegelijk te draaien; in dat geval worden ze geladen in de System VM en worden ze opgeofferd voor de MS-DOS-programma's.

Historische context

Hoewel velen dit zien als een functie van Windows 95, is het in werkelijkheid al een functie van Windows 3.1 (en mogelijk zelfs Windows 3.0). Het staat gedocumenteerd in de Windows 3.1 Resource Kit op pagina 263.

In die documentatie wordt een tabel getoond met drie manieren om TSR's te laden en hoe deze zichtbaar zijn in de verschillende virtuele machines (waarbij "virtuele machine" in deze context verwijst naar niet-Windows virtuele machines):

Waar TSR wordt geladenZichtbaar in Windows?Zichtbaar in virtuele machines?
Vanuit MS-DOSJaJa, alle virtuele machines
Vanuit WINSTART.BATJaNee
In een enkele virtuele machineNeeAlleen die specifieke virtuele machine

***

¹ Denk hier eens over na: we startten een besturingssysteem op en startten vervolgens een ander besturingssysteem eromheen, zodat het oorspronkelijke besturingssysteem nu draaide in een virtuele machine die werd beheerd door het tweede besturingssysteem. Het is alsof je je huis uitloopt, de straat op loopt en halverwege het blok beseft dat je eigenlijk in een filmset loopt.

² Het is niet letterlijk een kopie van het systeem op het moment dat Windows startte. In plaats daarvan is het een kopie van de System VM, maar alleen van de delen die bestonden op het moment dat Windows startte. De werking hiervan is te complex om in een voetnoot uit te leggen.