BilinSun 但是我还是要向您鞠躬🙇,您的代码起到了先驱的作用,让我跳过了很多坑。
而且,我的代码更烂,还没加注释。。。
为表达敬意,特奉上2442启动软盘一份~
下面来说说我对启动软盘的研究发现。
BilinSun 这不是正常的文件缺失错误,可能是Windows自身的问题。经过排查,i2omp.sys这个文件没有缺失或者损坏。何况,如果真正缺失文件,报错是这样的:
我制作这个2442的时候提示了这个——
我以为这张盘就这样💣了,谁知道这个文件真的缺失了。
补充后,恢复正常。
制作时因为实在太满,不得不多创建了一张软盘,把1、2里的部分文件移入当中,然后相应修改了txtsetup.sif。
随后,它的插入顺序变成了1-2-3-2,然后显示:
同样地,文件根本没有缺失,但它的错误就在那里,而且还是与您刚好反过来的错误!
我不得不将文件移回去,幸好还有一个文件可压缩,为我让出了空间。这次,它正常启动了。
那么,结论是?
- 若文件缺失,两种错误 Windows 都可能会出现。
- 任何一个文件都有可能必须与其它文件在同一个软盘里才可以加载(也就是依赖关系),如果不在就会报错。这些迹象可能表明,在微软内部,Srv2003&Longhorn 因为不再需要软盘启动,对文件列表的处理已经成为例行公事,甚至可能是微软故意做的手脚!
BilinSun 对于一般的启动软盘,我们都期待顺序插入软盘就能启动,即按照如Boot disk #1-#2-#3-#4的顺序。但是有的build的软盘做出来,要求的顺序会不太一样。甚至有个build是1-2-3-4-3-4-5-4-5,插拔非常麻烦。我不知道顺序是什么决定的,应该修改什么来改变这个顺序。
在 txtsetup.sif 中,有很长的一段内容。
[files.vga]
vga.sys,4
framebuf.dll,2
vga.dll,2
vga256.dll,2
vga64k.dll,2
[files.i8042]
i8042prt.sys,4
[files.sermouse]
sermouse.sys,4
[files.busmouse]
busmouse.sys,4
[files.inport]
inport.sys,4
[files.hidusb]
hidusb.sys,4
[files.mouhid]
mouhid.sys,4
[files.usbohci]
hid.dll,2
hidclass.sys,4
hidparse.sys,4
usbd.sys,4
usbport.sys,4
usbohci.sys,4
[files.usbuhci]
hid.dll,2
hidclass.sys,4
hidparse.sys,4
usbd.sys,4
usbport.sys,4
usbuhci.sys,4
[files.usbhub]
usbhub.sys,4
[files.usbccgp]
usbccgp.sys,4
[files.kbdhid]
kbdhid.sys,4
[files.usbstor]
usbstor.sys,4
[SystemPartitionFiles]
ntldr,"\"
[FileFlags]
halmps.dll = 8
halsp.dll = 8
kernel32.dll = 1
ntdll.dll = 1
win32k.sys = 1
ntldr = 2
cfgmgr32.dll = 8
setupapi.dll = 8
umpnpmgr.dll = 8
hal.dll = 12
kbdclass.sys = 16
mouclass.sys = 16
driver.cab = 16
NOTEPAD.EXE = 16
TASKMAN.EXE = 16
AVICAP.DLL = 16
AVIFILE.DLL = 16
COMMDLG.DLL = 16
LZEXPAND.DLL = 16
KEYBOARD.DRV = 16
MCIAVI.DRV = 16
MCISEQ.DRV = 16
MCIWAVE.DRV = 16
MMSYSTEM.DLL = 16
MMTASK.TSK = 16
MOUSE.DRV = 16
MSVIDEO.DLL = 16
OLECLI.DLL = 16
OLESVR.DLL = 16
SHELL.DLL = 16
SOUND.DRV = 16
SYSTEM.DRV = 16
TAPI.DLL = 16
TIMER.DRV = 16
VER.DLL = 16
VGA.DRV = 16
WFWNET.DRV = 16
WINSPOOL.DRV = 16
SPOOLSV.EXE = 16
SPOOLSS.DLL = 16
[ScsiClass.Load]
cdrom = cdrom.sys
disk = disk.sys
floppy = sfloppy.sys
[FloppyDrivers.Load]
flpydisk = flpydisk.sys
fat = fastfat.sys
[CdRomDrivers.Load]
cdfs = cdfs.sys
[SpecialFiles]
Multiprocessor = ntkrnlmp.exe,2,ntoskrnl.exe
Uniprocessor = ntoskrnl.exe,2
MPKrnlPa = ntkrpamp.exe,2,ntkrnlpa.exe
UPKrnlPa = ntkrnlpa.exe,2
mouseclass = mouclass.sys,4
keyboardclass = kbdclass.sys,4
它们似乎与加载有关,但加载顺序应该不可更改。如果要改变插拔顺序,或许只能通过移动文件解决。(当然,这非常非常麻烦)
BilinSun 对于部分中文版的build,在第一个盘加上bootfont.bin以后,中文还是不能显示,仍然是乱码😅可能另外还需要什么文件的支持,或者bootfont.bin还需要同时放到最后一个软盘?
从 NT 4.0 的文件来看,以上两种猜测都不对。
它的 bootfont.bin 位于1&2中,加载顺序为1-3-2。
- 删除1中的 bootfont.bin,加载驱动时乱码。
- 删除2中的 bootfont.bin,进入安装程序时乱码。
那么,结论是?
- bootfont.bin 还需要同时放到含 System32 文件夹的软盘。
制作2442的启动软盘时,它进入安装程序时乱码。按上述方法操作后恢复正常。
您在自述文件中说,“不能使用大于 1.44MB 的软盘映像,可能会导致蓝屏。”
但是,使用 winnt /ox 时,它却要求一张 1.68MB 的软盘!
于是,我进行了尝试。结论是:
- 除了含 System32 文件夹的软盘外,其它软盘可以使用更大的软盘(也不能太大,否则安装程序会卡死,我不确定最大可以多少,但 1.68MB 的可以)。
我在2442的启动软盘中也用了一张。
下面是我个人的一些问题。
为什么微软不再在加载期间使用中文?
我一开始认为是微软取消了启动期间解析ANSI代码的缘故,但是——
(更改了 TXTSETUP.SIF)
而且加载了 bootfont 还适得其反。
不过,在以光盘启动的时候是这样的:
启动完成之后,显示字体正常。
这没有显示出任何可靠的原因,但可能是因为什么 Bug 导致它不加载 bootfont 而不翻译文本,亦或者纯属能省就省。
启动软盘里面找不到 ntoskrnl,那么它是怎么可以显示开机动画的呢?
后来我发现了 ntkrnlmp,才知道它才是显示开机动画的那位。
那么,它们的区别是什么?为什么不直接用 ntoskrnl?
完。感谢阅读。