Perché sono presenti tre diverse impostazioni nella sezione [Paths] di MSDOS.SYS?

Aug 17 2020

In Windows 9x, il file di configurazione MSDOS.SYS contiene una [Paths]sezione il cui contenuto di solito è simile a questo:

[Paths]
WinDir=C:\WINDOWS
WinBootDir=C:\WINDOWS
HostWinBootDrv=C

Entrambi WinDire WinBootDirpuntano alla directory di installazione di Windows, che di solito è C:\WINDOWS, e HostWinBootDrvpuntano alla lettera di unità che la contiene. Avere impostazioni distinte suggerisce che potenzialmente queste potrebbero essere diverse. Ci sono situazioni in cui questo è il caso? Perché ci sono tre diverse impostazioni? Qual è il loro scopo comunque?

Risposte

9 user3840170 Aug 17 2020 at 14:22

HostWinBootDrvè il più semplice da spiegare: ha a che fare con la compressione del disco, ovvero DoubleSpace / DriveSpace. Quello che fa DriveSpace è creare un file con un nome simile DRVSPACE.nnn(con nnnun numero di tre cifre) che contiene il contenuto compresso del disco. Al file system compresso viene assegnata la lettera di unità della partizione contenente il file e a quest'ultima (chiamata unità host in questo contesto) viene assegnata un'altra lettera di unità, o talvolta nascosta completamente. Se la partizione da cui si avvia Windows è compressa, HostWinBootDrvpunta all'unità host di quella partizione, che per impostazione predefinita è H, mentre le altre impostazioni puntano al file system compresso.


Quanto a WinDire WinBootDir, quello che fanno è relativamente facile da scoprire. Alcune sperimentazioni rivelano quanto segue:

WinDirpunta alla directory in cui è installato Windows. La presenza di WinDirin MSDOS.SYSè ciò che indicava IO.SYS(prima di Windows Me) che era presente un'installazione di Windows che doveva essere preparata per l'avvio (al contrario del semplice avvio da un prompt dei comandi, come su un floppy di avvio di emergenza). Se WinDirè impostato, il kernel in modalità reale farà quanto segue:

  • Inserite due voci nella PATHvariabile d'ambiente: la directory puntata da WinDire la sua sottodirectory COMMAND;
  • Crea una sottodirectory TEMPin questa directory e punta le variabili di ambiente TEMPe TMPad essa;
  • Cancella un flag, restituito dal 0x2fservizio di interrupt 0x1611nel bit 5 del registro BL, che COMMAND.COMcontrolla per decidere se avviare WIN.COMdopo l'elaborazione AUTOEXEC.BAT;
  • Avvia il gestore della configurazione del dispositivo prima dell'elaborazione CONFIG.SYS(questo può essere soppresso SystemReg=0dall'impostazione nella [Options]sezione)
  • Cerca alcuni file critici in questa directory, incluso SYSTEM.DAT(il Registro di sistema), COMMAND.COM(che tornerà alla directory principale se assente) e driver in modalità reale come HIMEM.SYSe IFSHLP.SYS(che possono essere eliminati impostando DOS=NOAUTOin CONFIG.SYS);
  • Memorizza la directory stessa nella winbootdirvariabile d'ambiente (tutta minuscola!).

Gli ultimi due di questi sono ciò che può essere sovrascritto impostando WinBootDir: se anche quell'impostazione è presente, quei file verranno invece cercati WinBootDir, e ovviamente è quella directory che finirà nella winbootdirvariabile d'ambiente.

Ci sono tuttavia alcune rughe qui, ad esempio rispetto a WIN.COM. Quando il AUTOEXEC.BATfile è assente, vuoto o viene saltato (come ad esempio in modalità provvisoria), COMMAND.COMnon viene caricato e il kernel in modalità reale verrà invece eseguito direttamente WIN.COMda WinBootDir. Tuttavia, se AUTOEXEC.BATpresente, COMMAND.COMverrà avviato per elaborarlo, dopodiché eseguirà a sua volta il comando WIN, lanciandolo WIN.COM… cercandolo in PATH, che per impostazione predefinita punta a WinDir.


Bene, grande, ma il motivo per cui sono WinDire WinBootDirimpostazioni separate a tutti? Non è ancora del tutto chiaro per me, ma da quel poco che posso raccogliere, probabilmente doveva supportare l'avvio di Windows su una LAN. In una tale configurazione, DOS verrebbe prima caricato da un normale file system (o anche se stesso da un'immagine disco scaricata sulla rete), carica i driver essenziali come HIMEM.SYSda si WinBootDirtrova sullo stesso file system, quindi carica i driver di rete DOS, mappa una condivisione (contenente WinDir) alla sua lettera di unità, quindi continuare l'avvio da lì. Se questo è lo scenario previsto, anche la WIN.COMstranezza inizia ad avere senso ora: potrebbe esserci una copia di Windows "principale" avviata quando si avvia normalmente da WinDire un'altra copia di "emergenza" minima avviata in modalità provvisoria da WinBootDir, quando l'avvio di rete non riesce.

In ogni caso, i requisiti di questo scenario potrebbero facilmente richiedere che queste due impostazioni abbiano valori diversi. Ecco un breve frammento di un documento che descrive proprio una tale configurazione:

D-2. MSDOS.SYS Sample File for DM9102 :
=======================================

      [Paths]
      WinDir=g:\client1
      WinBootDir=d:\winboot     <== According to RAMDRIVE.SYS assign
      HostWinBootDrv=c              Virtual Drive (D: or E:)

C'è anche un documento e una serie di articoli di Micho Durdevich ( parte 1 , 2 , 3 , 4 , 5 e 6 ) che descrivono come ottenere l'avvio dalla rete con Windows 9x.

Sono alquanto scarsi sui dettagli di come tutto questo ha funzionato, ma entrambe le fonti menzionano SETMDIRun'utilità, che è distribuita come parte di Windows 95. Ciò implica che l'avvio dalla rete era probabilmente un caso d'uso inteso da Microsoft.

2 wendy.krieger Sep 22 2020 at 19:34

Winbootdir punta alla directory in cui si trovano i file di avvio DOS. Può essere diversa da Windir.

Windir punta alla directory in cui si trova il registro dell'utente. Su una rete può essere diverso da dove è installato Windows.

Winbootdir viene utilizzato se non è presente config.sys / autoexec.bat, per caricare i driver come himem.sys, ifs $ hlp.sys e co. Potrebbe essere su un'immagine di avvio inviata attraverso la rete, ad esempio.

Windir come in 3.0, deve contenere win.com, ma win.com è quindi responsabile dell'avvio di Windows (eseguendo win32.vxd o qualcosa del genere).

== Modifica ==

http://reboot.pro/topic/22047-dual-boot-msdos-710-and-630/

Questo articolo descrive la creazione di una configurazione DOS minima, utilizzando il DOS di Win98se e un MS-DOS 6.22 leggermente modificato.

Esempi di cosa succede quando winbootdir e windir vengono modificati. Il comando setmdir cambia windir dopo che il sistema è stato avviato, non lo stiamo usando qui.

http://reboot.pro/topic/18130-ms-dos-7-help-file/

Questo argomento contiene i commenti di lavoro per la creazione di un file di aiuto qbasic per DOS da 5 a 7 (cioè in sostituzione di ciò che è sul CDROM).

https://www.betaarchive.com/forum/viewtopic.php?f=72&t=34798&p=401645#p401645

È qui che stiamo documentando l'esecuzione di più versioni di Windows 9x come opzioni nel config.sys. Finora abbiamo superato la maggior parte dei problemi nell'avvio di Win95 da DOS98SE.

https://www.betaarchive.com/forum/viewtopic.php?f=60&t=41489

Questo è un progresso nell'esecuzione di Windows 95 e ME da DOS98SE. Ha un collegamento ai file DOS utilizzati negli esperimenti.

Tutti questi esperimenti si basano su sessioni VPC che fanno quanto descritto. Ad esempio, dopo che Offer ha pubblicato la costruzione di c: \ MSDOS7, ho eseguito l'esperimento con diversi NT5x sopra le diverse installazioni Win98 e ME, in inglese e in tedesco. È da lì che ho avuto l'idea di utilizzare c: \ msdos7.