计算机技術文摘

Win98 wininit.ini文件詳解

用过Windows 9x的人都见过如下的提示信息:
Please wait while Setup updates your configuration files.
This may take a few minutes……
   
这是安装完某个软件或者硬件的驱动程序,应安装程序的要求重新启动Windows后的正常现象,绝不会把它与病毒联系起来,本文将用事实告诫你,如果你的机器启动时无缘无故地出现上述信息,就要赶紧去找最新的杀毒软件了!

  
这时Windows在干什么呢?实际上它在执行Wininit.ini给出的指令,Wininit.ini是一个鲜为人知的文件,主要用于删除、更名和更新在Windows运行时不能被施以这些操作的文件,它存在的时间很短,所以显得有点神秘。

  
一、Wininit文件工作机制

   众所周知,在Windows中,一个可执行文件如果正在运行或某个库文件(*.dll*.vxd*.sys等)正在被打开使用,则不能被改写或删除。例如,你不可能在资源管理器中删除Windowsexplorer.exe,而在WindowsGDI界面下,有一些文件一直处于这种状态下,除explorer.exe外,还有显示驱动程序库文件,文件子系统库文件等,如果我们要对这些文件进行升级,改动,就必须在Windows保护模式核心启动前进行,于是Windows就提供了基于Wininit.ini文件的一个机制来完成这个任务,这个机制是,要删除或改写这类文件的应用程序按一定的格式把命令写入 Wininit.iniWindows在重启时,将在Windows目录下搜索Wininit.ini文件,如果找到,就遵照该文件指令删除、改名、更新文件,完成任务后,将删除Wininit.ini文件本身,继续启动过程。所以Wininit.ini文件中的指令只会被执行一次,列目录时也通常没有它的踪影。

   Wininit.ini文件的格式简述如下:

    Windows 95 Resource Kit
提到Wininit.ini文件有三个可能的段,但只叙述了“rename”段的用法,虽然名为“rename”,却可实现删除、改名、更新文件的功能。其格式为:

 [rename]

……
filename1=filename2

……
“filename1=filename2”相当于依次执行“copy filename2 filename1”“del filename2”这两个DOS命令。

启动时,Windows将用filename2覆盖filename1,再删除filename2,这就实现了用filename2与更新filename1的目的,如果filename1不存在,实际结果是将filename2改名为filename1;如果要删除文件,可令filename1nul,例如:

[rename]
 ……
 nul=filename2
……
将删除filename2

以上文件名都必须包含完整路径,注意:由于Wininit.ini文件的处理是在Windows文件系统调入前,所以不支持长文件名。

Wininit.ini
的应用很多,除了经常在软硬件的安装程序中用到外,还有软硬件的卸载程序中用到,比如:假设你要为自己的软件编写一个卸载程序,这个卸载程序本身是不可能被自己删除的,因为它试图删除自身时,自身却正在运行。为了清除卸载程序本身,你就得借助于Wininit.ini文件。顺便提一句,在安装Windows的最后阶段,就是利用Wininit.ini文件来清除和更名被安装程序SETUP自身使用的文件。

   二、采用Wininit.ini彻底杀除病毒

 
Windows平台下杀病毒,会碰到类似问题:如何清除正在运行或处于打开状态的染毒文件中的病毒?了解了Wininit.ini文件的工作机制,我们可以这样来设计杀毒软件:在发现某个染毒文件因为正处于打开状态或执行状态而不能清除病毒时,可将其复制一份,并将复制品去毒,然后在Windows 目录下创建一个Wininit.ini文件(创建之前要先查查 Wininit.ini 文件是否存在),建立[rename]段,加入一行:染毒文件名=复制品文件名;继续清扫病毒,如果发现类似文件,可在[rename]下再添加一行即可;扫瞄完成后应强烈建议用户重新启动或干脆强行重新启动,以便执行Wininit.ini,完成整个清毒过程。

 
四、补充资料

Wininit.ini
先要讲一下Windows的启动过程,(随便提一下Wininit.ini仅对Win95 Win98 WinMe有效)一台电脑的启动过程大至是BIOS -> MBR -> DBR -> io.sys -> win.com -> Wininit.exe ->...... 就是这个Wininit.exe读取Wininit.ini中的信息并依照它的命令执行的. win.com还处于实模式时加载运行Wininit.exe,并等待它结束后,win.com才进入保护模式继续加载Windows.Wininit.ini中的项目微软只公开了[RENAME]字段的一 部分,而不肯告诉我们其他信息.但这并不说明Wininit.ini就没有秘密,据我研究证实Wininit.ini[RENAME]还有这一功能,请看事例
:
  
[RENAME]
  
DIRNUL=C:\SMENU
   上面的项目会在二次启动后删除C:\SMENU目录和它的下级目录与文件.但是这个项目是危险的,如果是DIRNUL=C:\DIRNUL=D:\ 会怎样呢
...
还有
:
  
[NUL]
  
c:\SMENU\SMENU.EXE=1
   会在二次启动后删除
c:\SMENU\SMENU.EXE

   还有
:
  
[DIRNUL]
  
C:\SMENU=1
   会在二次启动后删除C:\SMENU目录和它的下级目录与文件
.

   还有
:
  
[CombineVxDs]
  
C:\DRIVER\VFAT.VXD=C:\WINDOWS\SYSTEM\VMM32.VXD
  
C:\DRIVER\CDFS.VXD=C:\WINDOWS\SYSTEM\VMM32.VXD
   会在二次启动后用c:\driver下的vfat.vxdcdfs.vxd去重新合并一个

   c:\windows\system\vmm32.vxd,这个项目与合并VXD有关
.

   还有
:
  
[SetupOptions]
  
combine=1
   会在二次启动后使[CombineVxDs]项目生效,没有[SetupOptions][CombineVxDs]是无效的
.

   补充
:

   1:Wininit.ini只在Win95 Win98 WinMEWindows目录下有效,且在二次启动执行完其中指令后被

   Wininit.exe删除
.
   2:Wininit.ini中目录与文件的引用必须用绝对路径表示,并且是8.3文件名格式。

  

posted on 2005-10-27 21:56 计算机技术博客 阅读(236) 评论(0)  编辑 收藏 引用

公告

http://www.nuanbb.com

导航

常用链接

随笔分类(255)

常用链接