Por que existem três configurações diferentes na seção [Paths] do MSDOS.SYS?

Aug 17 2020

No Windows 9x, o arquivo de configuração MSDOS.SYS contém uma [Paths]seção cujo conteúdo geralmente se parece com este:

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

Ambos WinDire WinBootDirapontam para o diretório de instalação do Windows, que geralmente é C:\WINDOWS, e HostWinBootDrvapontam para a letra da unidade que o contém. Ter configurações distintas sugere que potencialmente podem ser diferentes. Existem situações em que este é o caso? Por que existem três configurações diferentes? Qual é o propósito deles?

Respostas

9 user3840170 Aug 17 2020 at 14:22

HostWinBootDrvé o mais fácil de explicar: tem a ver com compactação de disco, ou seja, DoubleSpace / DriveSpace. O que o DriveSpace faz é criar um arquivo com um nome como DRVSPACE.nnn( nnnsendo um número de três dígitos) que contém o conteúdo compactado do disco. Ao sistema de arquivos compactado é atribuída a letra da unidade da partição que contém o arquivo e a última (chamada de unidade host neste contexto) é atribuída a outra letra de unidade ou, às vezes, totalmente oculta. Se a partição a partir da qual o Windows é iniciado estiver compactada, HostWinBootDrvaponta para a unidade host dessa partição, que por padrão é H, enquanto as outras configurações apontam para o sistema de arquivos compactado.


Quanto a WinDire WinBootDir, o que eles fazem é relativamente fácil de descobrir. Algumas experiências revelam o seguinte:

WinDiraponta para o diretório no qual o Windows está instalado. A presença de WinDirin MSDOS.SYSé o que instruía IO.SYS(antes do Windows Me) que havia uma instalação do Windows presente que deveria ser preparada para iniciar (em oposição a apenas inicializar em um prompt de comando, como em um disquete de inicialização de emergência). Se WinDirestiver definido, o kernel de modo real fará o seguinte:

  • Coloque duas entradas na PATHvariável de ambiente: o diretório apontado por WinDire seu subdiretório COMMAND;
  • Criar um subdiretório TEMPsob esse diretório e apontar as variáveis de ambiente TEMPe TMPa ela;
  • Apaga um sinalizador, retornado pelo 0x2fserviço de interrupção 0x1611no bit 5 do registrador BL, que COMMAND.COMverifica para decidir se deve iniciar WIN.COMapós o processamento AUTOEXEC.BAT;
  • Inicie o gerenciador de configuração do dispositivo antes do processamento CONFIG.SYS(isso pode ser suprimido pela SystemReg=0configuração na [Options]seção)
  • Procure por determinados arquivos críticos neste diretório, incluindo SYSTEM.DAT(o Registro), COMMAND.COM(que retornará ao diretório raiz se ausente) e drivers de modo real como HIMEM.SYSe IFSHLP.SYS(que podem ser suprimidos configurando DOS=NOAUTOem CONFIG.SYS);
  • Armazene o próprio diretório na winbootdirvariável de ambiente (tudo em minúsculas!).

Os dois últimos desses são os que podem ser sobrescritos pela configuração WinBootDir: se essa configuração também estiver presente, esses arquivos serão pesquisados ​​em seu WinBootDirlugar e, claro, é esse diretório que terminará na winbootdirvariável de ambiente.

No entanto, existem algumas rugas aqui, por exemplo em relação a WIN.COM. Quando o AUTOEXEC.BATarquivo está ausente, vazio ou sendo ignorado (como, por exemplo, no Modo de Segurança), COMMAND.COMnão é carregado e o kernel em modo real será executado diretamente WIN.COMdo WinBootDir. Porém, se AUTOEXEC.BATestiver presente, COMMAND.COMserá lançado para processá-lo, após o que por sua vez executará o comando WIN, lançando WIN.COM... procurando-o em PATH, que por padrão aponta para WinDir.


Bem, ótimo, mas por que WinDire WinBootDirconfigurações separadas em tudo? Ainda não está totalmente claro para mim, mas pelo pouco que pude reunir, provavelmente era para dar suporte à inicialização do Windows através de uma LAN. Em tal configuração, DOS seria primeiro ser carregado a partir de um sistema de arquivos normal (ou mesmo se de uma imagem de disco baixados pela rede), carregar drivers essenciais como HIMEM.SYSa partir WinBootDirlocalizados no mesmo sistema de arquivos, em seguida, carregar os drivers de rede DOS, mapear uma partilha (contendo WinDir) à letra da unidade e, em seguida, continue inicializando a partir daí. Se for esse o cenário pretendido, até mesmo a WIN.COMestranheza começa a fazer sentido agora: pode haver uma cópia 'principal' do Windows iniciada ao inicializar normalmente de WinDir, e outra cópia mínima de 'emergência' inicializada no Modo de Segurança de WinBootDir, quando a inicialização da rede falha.

Em qualquer caso, os requisitos deste cenário podem facilmente exigir que essas duas configurações tenham valores diferentes. Aqui está um pequeno fragmento de um documento que descreve exatamente essa configuração:

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:)

Há também um documento e uma série de artigos de Micho Durdevich ( parte 1 , 2 , 3 , 4 , 5 e 6 ) que descreve como obter a inicialização da rede com o Windows 9x.

Eles são um tanto escassos sobre os detalhes de como tudo isso funcionava, mas ambas as fontes mencionam um SETMDIRutilitário, que é distribuído como parte do Windows 95. Isso implica que a inicialização pela rede foi provavelmente um caso de uso pretendido pela Microsoft.

2 wendy.krieger Sep 22 2020 at 19:34

Winbootdir aponta para o diretório onde estão os arquivos de inicialização do DOS. Pode ser diferente do Windir.

Windir aponta para o diretório em que o registro do usuário está. Em uma rede, isso pode ser diferente de onde o Windows está instalado.

Winbootdir é usado se não houver config.sys / autoexec.bat, para carregar os drivers como himem.sys, ifs $ hlp.sys e co. Pode ser em uma imagem de inicialização enviada pela rede, por exemplo.

Windir, como no 3.0, precisa conter win.com, mas win.com é então responsável por iniciar o Windows (executando win32.vxd ou algo assim).

== Editar ==

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

Esta postagem descreve a criação de uma configuração mínima do DOS, usando o DOS do Win98se, e um MS-DOS 6.22 ligeiramente modificado.

Exemplos do que acontece quando winbootdir e windir são alterados. O comando setmdir muda o windir depois que o sistema é inicializado, não o estamos usando aqui.

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

Este tópico contém os comentários de trabalho para a criação de um arquivo de ajuda básico para DOS 5 a 7 (ou seja, como um substituto para o que está no CDROM).

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

É aqui que documentamos a execução de várias versões do Windows 9x como opções no config.sys. Até agora, superamos a maioria dos problemas ao iniciar o Win95 a partir do DOS98SE.

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

Este é o progresso da execução do Windows 95 e ME a partir do DOS98SE. Possui um link para os arquivos DOS usados ​​nos experimentos.

Todos esses experimentos são baseados em sessões VPC que fazem o que é descrito. Por exemplo, depois que Offer postou a construção de c: \ MSDOS7, eu executei o experimento com vários NT5x por cima de diferentes instalações de Win98 e ME, em inglês e em alemão. É de onde tive a ideia de usar c: \ msdos7.