中国DOS联盟论坛

中国DOS联盟

-- 联合DOS 推动DOS 发展DOS --
联盟域名:www.cn-dos.net 论坛域名:www.cn-dos.net/forum
游客 | 登录 | 注册 | 会员 | 搜索 | 中国DOS联盟
中国DOS联盟论坛
现在时间是 2026-08-13 20:35
47,811 主题排行 / 349,897 发帖 / 今日 0 篇 / 48,256 会员排行
DOS学习入门 & 精彩文章 (教学室) » 介绍:%windir%和%winbootdir%
可打印版本  1,900 / 10
第1楼 Wengier 发表于 2003-09-08 00:00
系统支持 发帖 10,521 积分 27,736
介绍:%windir%和%winbootdir%
用过MS-DOS 7.x/Win9x的人就知道,系统中有两个特殊的变量:%windir%、%winbootdir%。那么,它们到底是怎样产生的呢?我刚才进行了一些研究,下面就来介绍一下。

DOS在启动时首先看MSDOS.SYS的项中有没有指定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!
第2楼 Wengier 发表于 2003-09-09 00:00
系统支持 发帖 10,521 积分 27,736
最后一句话修改一下,应该是IO.SYS将MS-DOS.SYS中指定的winbootdir路径保存于内存中的某个位置,然后由Win9x的VMM32.VXD(不是WIN.COM)来从内存的那个位置取得它并设置为%winbootdir%环境变量值,然后读取WIN注册表文件%winbootdir%\SYSTEM.DAT和%winbootdir%\USER.DAT,否则就会提示注册表文件找不到。
第3楼 Wengier 发表于 2003-09-11 00:00
系统支持 发帖 10,521 积分 27,736
最新更新:

经过研究和实验已证明:IO.SYS是将MSDOS.SYS中的winbootdir路径存入内存中的地址1020FE(16进制)处,这是固定地址。在这儿可以看到类似"C:\WIN98\SYSTEM.DAT"的字样。因此,如果想修改WIN路径的话,将类似"C:\WIN98\SYSTEM.DAT"的字样换成别的即可,例如"D:\WIN98SE\SYSTEM.DAT",然后直接进入D:\WIN98SE\WIN.COM。由于那儿留下的空间很多,所以基本上没有字符长度限制问题,想修改成多长都可以的。
第4楼 cn_archer 发表于 2003-09-11 00:00
元老会员 发帖 991 积分 2,903 来自 福建省
好东西,顶!
第5楼 龙王 发表于 2003-09-13 00:00
银牌会员 发帖 334 积分 1,186
今受益~~
我发现我自己设置的config.sys和autoexec.bat没起作用
我把msdos.sys删除后顺利通过以上设置启动windows
看过此介绍,已解心中迷惑
第6楼 eboyzwb 发表于 2004-04-24 00:00
初级用户 发帖 21 积分 185
第7楼 #four# 发表于 2004-05-28 00:00
中级用户 发帖 34 积分 209
多谢!好.
第8楼 不点 发表于 2004-05-28 00:00
银牌会员 发帖 1,115 积分 2,491
wengier兄剥光了 MS 的内裤.

第9楼 如是大师 发表于 2004-05-28 00:00
元老会员 发帖 3,351 积分 9,654 来自 湖北
哈哈。。还是wengier厉害啊。我这里有个问题。就是在io。sys中一定要设置winbootdir路径为实际盘符吗?能不能直接设成变量%winbootdir%。

我试过,如果不更改.io.sys的话在注册表里面将路径设成%winbootdir%是无效的。。假如能将注册表里的路径统统设成%winbootdir%那么就会是真正意义上的可以任意移植的windows操作系统了。。
第10楼 kulongerzu 发表于 2004-07-07 00:00
中级用户 发帖 39 积分 243 来自 浙江
顶!顶!顶!
第11楼 linux1234 发表于 2004-07-08 00:00
中级用户 发帖 42 积分 293
嗯,不错,我很满意
[ 联系联盟系统管理团队 - 中国DOS联盟 - 标准版 ]
Sponsored by ifanr Inc | © 2001–2023