Perché sono presenti tre diverse impostazioni nella sezione [Paths] di MSDOS.SYS?
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 WinDir
e WinBootDir
puntano alla directory di installazione di Windows, che di solito è C:\WINDOWS
, e HostWinBootDrv
puntano 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
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 nnn
un 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, HostWinBootDrv
punta all'unità host di quella partizione, che per impostazione predefinita è H
, mentre le altre impostazioni puntano al file system compresso.
Quanto a WinDir
e WinBootDir
, quello che fanno è relativamente facile da scoprire. Alcune sperimentazioni rivelano quanto segue:
WinDir
punta alla directory in cui è installato Windows. La presenza di WinDir
in 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
PATH
variabile d'ambiente: la directory puntata daWinDir
e la sua sottodirectoryCOMMAND
; - Crea una sottodirectory
TEMP
in questa directory e punta le variabili di ambienteTEMP
eTMP
ad essa; - Cancella un flag, restituito dal
0x2f
servizio di interrupt0x1611
nel bit 5 del registro BL, cheCOMMAND.COM
controlla per decidere se avviareWIN.COM
dopo l'elaborazioneAUTOEXEC.BAT
; - Avvia il gestore della configurazione del dispositivo prima dell'elaborazione
CONFIG.SYS
(questo può essere soppressoSystemReg=0
dall'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 comeHIMEM.SYS
eIFSHLP.SYS
(che possono essere eliminati impostandoDOS=NOAUTO
inCONFIG.SYS
); - Memorizza la directory stessa nella
winbootdir
variabile 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 winbootdir
variabile d'ambiente.
Ci sono tuttavia alcune rughe qui, ad esempio rispetto a WIN.COM
. Quando il AUTOEXEC.BAT
file è assente, vuoto o viene saltato (come ad esempio in modalità provvisoria), COMMAND.COM
non viene caricato e il kernel in modalità reale verrà invece eseguito direttamente WIN.COM
da WinBootDir
. Tuttavia, se AUTOEXEC.BAT
presente, COMMAND.COM
verrà 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 WinDir
e WinBootDir
impostazioni 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.SYS
da si WinBootDir
trova 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.COM
stranezza inizia ad avere senso ora: potrebbe esserci una copia di Windows "principale" avviata quando si avvia normalmente da WinDir
e 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 SETMDIR
un'utilità, che è distribuita come parte di Windows 95. Ciò implica che l'avvio dalla rete era probabilmente un caso d'uso inteso da Microsoft.
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.