标题: 介绍:%windir%和%winbootdir%
[打印本页]
作者: Wengier
时间: 2003-9-8 00:00
标题: 介绍:%windir%和%winbootdir%
用过MS-DOS 7.x/Win9x的人就知道,系统中有两个特殊的变量:%windir%、%winbootdir%。那么,它们到底是怎样产生的呢?我刚才进行了一些研究,下面就来介绍一下。
DOS在启动时首先看MSDOS.SYS的[Paths]项中有没有指定winbootdir路径,这时,就有两种情况:
如果没有指定winbootdir路径的话,将进行以下操作,否则将直接进入步骤B:
A:这时又分为两种情况:MSDOS.SYS中指定了windir路径;MSDOS.SYS中没有指定windir路径。
如果指定了windir路径的话,那么winbootdir将自动使用windir路径;如果没有指定windir路径的话,那windir将被自动设置为默认值:C:\WINDOWS
此操作完成后,windir路径就已被自动指定了,也将进入步骤B。
B:然后,又分为两种情况:MSDOS.SYS中指定了windir路径;没有指定windir路径。
如果MSDOS.SYS中指定了windir路径的话,那么这时的winbootdir路径将被自动设置为DOS环境变量%winbootdir%,并自动加载HIMEM.SYS、IFSHLP.SYS等;如果没有指定windir路径的话,将不把winbootdir路径设置为环境变量%winbootdir%,并不自动加载HIMEM.SYS、IFSHLP.SYS等。
然后,MSDOS.SYS中指定的windir路径就没有作用了,但指定的winbootdir路径却有用。但WIN.COM启动时,会通过调用IO.SYS中的一个功能重新自动取得MSDOS.SYS中的winbootdir变量并设置为环境变量%winbootdir%,所以如果在此之前手工修改%winbootdir%环境变量(例如用ENVMASTR等工具)是没有用的。
WIN.COM在重新生成%winbootdir%环境变量的同时,也会自动产生%windir%环境变量,但不像%winboodir%,这个%windir%变量不是从MSDOS.SYS的windir路径中取得的,而是自动获得WIN.COM文件的当前实际路径。
由于WIN.COM是通过调用MS-DOS 7.x的IO.SYS的一个新增功能来重新得到MSDOS.SYS的winbootdir路径并设置为%winbootdir%环境变量,而此功能在其它的DOS(如MS-DOS 6.x、ROM-DOS、PC-DOS等)中不存在,所以目前无法在非MS-DOS 7.x/8.0的DOS下启动Win9x GUI!
作者: Wengier
时间: 2003-9-9 00:00
最后一句话修改一下,应该是IO.SYS将MS-DOS.SYS中指定的winbootdir路径保存于内存中的某个位置,然后由Win9x的VMM32.VXD(不是WIN.COM)来从内存的那个位置取得它并设置为%winbootdir%环境变量值,然后读取WIN注册表文件%winbootdir%\SYSTEM.DAT和%winbootdir%\USER.DAT,否则就会提示注册表文件找不到。
作者: Wengier
时间: 2003-9-11 00:00
最新更新:
经过研究和实验已证明:IO.SYS是将MSDOS.SYS中的winbootdir路径存入内存中的地址1020FE(16进制)处,这是固定地址。在这儿可以看到类似"C:\WIN98\SYSTEM.DAT"的字样。因此,如果想修改WIN路径的话,将类似"C:\WIN98\SYSTEM.DAT"的字样换成别的即可,例如"D:\WIN98SE\SYSTEM.DAT",然后直接进入D:\WIN98SE\WIN.COM。由于那儿留下的空间很多,所以基本上没有字符长度限制问题,想修改成多长都可以的。
作者: cn_archer
时间: 2003-9-11 00:00
好东西,顶!
作者: 龙王
时间: 2003-9-13 00:00
今受益~~
我发现我自己设置的config.sys和autoexec.bat没起作用
我把msdos.sys删除后顺利通过以上设置启动windows
看过此介绍,已解心中迷惑
作者: eboyzwb
时间: 2004-4-24 00:00
好
作者: #four#
时间: 2004-5-28 00:00
多谢!好.
作者: 不点
时间: 2004-5-28 00:00
wengier兄剥光了 MS 的内裤.
作者: 如是大师
时间: 2004-5-28 00:00
哈哈。。还是wengier厉害啊。我这里有个问题。就是在io。sys中一定要设置winbootdir路径为实际盘符吗?能不能直接设成变量%winbootdir%。
我试过,如果不更改.io.sys的话在注册表里面将路径设成%winbootdir%是无效的。。假如能将注册表里的路径统统设成%winbootdir%那么就会是真正意义上的可以任意移植的windows操作系统了。。
作者: kulongerzu
时间: 2004-7-7 00:00
顶!顶!顶!
作者: linux1234
时间: 2004-7-8 00:00
嗯,不错,我很满意