This box will be fixed on your screen using Firefox, Opera9 or IE7.

vfloppy——让软驱下岗

经常有人提出这样或者类似的问题“我光驱、软驱都坏了,但想在DOS下重装Windows 2000,有什么方法吗?”或者也有人有这样的问题“我只安装了一个Windows 2000/XP,并且C盘是NTFS分区,怎么才能从硬盘直接启动到DOS下呢?”诸如此类的问题,在Windows 2000/XP/2003时代,不少朋友都会遇到。

身处OS Loader时代

现在大家的PC机上一般都安装的是Windows 2000、Windows XP操作系统,并使用OS Loader作为启动管理器。OS Loader这个启动管理器的优点是直接安装在分区的引导扇区上,不影响主引导扇区(Main Boot Record,就是我们常说的MBR),因此不会被误判为病毒。此外,OS Loader可以直接安装在NTFS,而且由于是Windows自带的,用起来比较方便,所以大部分Windows的用户都直接使用OS Loader来实现多系统引导(不少人除Windows 2000/XP系统外没装其他系统)。图一:启动菜单由Boot.ini控制图注 OS Loader的启动菜单由Boot.ini控制

Microsoft前段时间曾经说过,不再准备支持软驱,而现状是目前比较新的PC机一般都取消了软驱,比较老的PC机的软驱很可能也坏了(如我的老机器),而且软盘也容易损毁,所以需要软驱的机会不太多了。由于软盘在PC历史上发挥过比较大的作用,在某些情况下,我们还必须通过它来完成某些工作,比如在没有CDROM的机器上安装新的操作系统、杀毒,或者测试需要启动到DOS下来完成一些数据的备份、维护工作(毕竟不是我们需要的所有软件都已经完美支持了WinPE环境)。

综上两种情形,我们可以通过OS Loader来加载一些需要软盘来进行的启动盘。为什么说要加载其他操作系统的启动盘,而不是启动文件?这是因为OS Loader只能在FAT和NTFS分区上运行,而在软盘上运行的系统大多数又不支持NTFS分区。所以我们可以把软盘做成镜像,然后通过OS Loader来加载镜像文件。

目前OS Loader只支持加载引导扇区或者引导扇区的镜像文件,而不支持直接加载软盘镜像,所以本文需要介绍的vFloppy就应运而生了。

类似的工具

那么有没有其他的引导程序可以完成类似的工作呢?
答案是肯定的,不但有,而且还不少,不过它们的功能不尽相同。

  • 名称及相关网站
  • 支持操作系统
  • 支持文件系统
LILO
Linux
不能虚拟软盘
Diskemu
光盘运行
ISO9660
BootScriptor
光盘运行
ISO9660
ISOLinux
光盘运行
ISO9660
SysLinux
FAT1.6/FAT1.2
GRUB
Linux
通过sysLinux 的Memdisk可以完成类似功能,但memdisk需要镜像文件在硬盘上连续存放

OS Loader的特点

MS的OS Loader除了可以加载WinNT/Win2000/WinXP等等,还可以运行以前安装的Windows98,Windows 98 启动的过程是:

  1. BIOS自检后,加载硬盘的主引导纪录MBR,运行MBR的代码。
  2. MBR的代码检测分区表,然后加载活动分区的引导纪录——DBR,运行DBR的代码。
  3. Windows 98的DBR的代码查找IO.sys,启动Windows 98。

硬盘最基本的组成部分是由坚硬金属材料制成的涂以磁性介质的盘片,盘片被分成许多扇形的区域,每个区域叫一个扇区,大多数情况下每扇区是512字节,老式硬盘使用磁道(或柱面)和磁头数,以及扇区作为硬盘结构的基本参数,目前的硬盘直接使用扇区号来访问硬盘,128G以下的硬盘使用32位整数作为扇区号,而128G以上的硬盘使用48位整数作为扇区号。

MBR(Main Boot Record),即为主引导记录区,位于整个硬盘的第一个扇区,在总共512字节的主引导扇区中,MBR只占用了其中的446个字节另外的64个字节交给了DPT(Disk Partition Table硬盘分区表),主要这两部分构成了硬盘的主引导扇区。DBR(Dos Boot Record)是操作系统引导记录区。它位于硬盘的每个分区的第一个扇区,是操作系统可以直接访问的第一个扇区,它一般包括一个位于该分区的操作系统的引导程序和相关的分区参数记录表。图二:硬盘引导系统访问这些扇区图注:硬盘引导系统访问这些扇区

OS Loader加载Windows 98的原理是,安装Win2000的时候,保存了Windows 98的引导纪录DBR文件——BootSect.dos,然后安装Win2000自己的引导记录DBR,

用OS Loader启动Windows 98的过程是:

  1. BIOS自检后,加载硬盘的主引导纪录——MBR,运行MBR的代码。
  2. MBR的代码检测分区表,然后加载活动分区的引导纪录——DBR,运行DBR的代码,该代码是OS Loader的代码。
  3. OS Loader的DBR的代码加载相关的程序(主要是ntldr和ntdect.com文件),分析boot.ini文件,显示启动菜单,等待接受用户的命令——启动相应的操作系统的启动文件。
  4. 如果用户选择Win98,那么OS Loader的DBR的代码加载保存下来的Windows98的DBR文件——BootSect.dos,运行该DBR的代码。
  5. Windows 98的DBR的代码查找IO.sys,启动Windows 98。

从上面2个过程的对比可以看出,OS Loader在加载Windows98的时候,仅仅是一个传递引导控制的过程,把计算机启动代码运行过程传递到一个文件(BootSect.dos)中,然后由这个文件继续引导操作系统。

从上面的分析过程,可以看出,OS Loader可以加载一个引导文件,然后把控制转移到该引导文件上,平时常见的用OS Loader加载Linux就是类似的原理。

虚拟软盘的使用

vFloppy 1.0由3个文件组成,vfloppy.exe、vLoader.bin和vMemdsk.bin。其中vfloppy.exe是Win32的控制台程序,vLoader.bin是一个512字节的引导代码(由OS Loader来选择加载),vMemdsk.bin则用来在内存中虚拟一个软驱,从而加载并运行软盘镜像。最新的1.5版本,不包括vLoader.bin和vMemdsk.bin,而由主程序vFloppy执行时自动生成和软盘镜像文件同前缀的两个文件来完成同样功能,另外vFloppy 1.5还提供了在DOS下支持NTFS分区的软盘镜像。

另外还需要一个软盘镜像文件,vFloppy目前支持1.44MB或者2.88MB大小的镜像文件,该镜像文件必须可以启动(就是把这个文件写进软盘后,可以从该软盘启动计算机)。我们可以用WinImage来制作软盘镜像。

  1. 安装vFloppy

    假设 vFloppy 放在c:\boot,c盘可以是FAT 16/FAT32和NTFS 分区格式。

    • 如果你手头的是vFloppy 1.0,则可以运行:
      vfloppy -1 vLoader.bin -2 vMemdsk.bin -i anyos.img其中的anyos.img表示你需要在OS Loader下引导的软盘镜像文件。然后在c:\boot.ini中加入一项:
      C:\boot\vLoader.bin ="vFloppy Virtual Floppy Disk "

    • 对于vFloppy 1.5来说,由于重新编写了内核,并增加了GUI引导界面。所以你需要打开vFloppy,指定软盘镜像文件所在的位置即可。图三:vFloppy 1.5安装更简单图注 vFloppy 1.5安装更简单

      重新启动系统后,在OS Loader的菜单上选择:vFloppy Virtual Floppy Disk就会加载 c:\boot\anyos.img 这个镜像,并启动系统——就好像从一个软驱中启动一样。

  2. vFloppy三大优点

    从上面的介绍和操作,我们可以看出,使用vFloppy虚拟软驱启动,至少有三大优点:

    1. 安全。虚拟软盘是只读的,不向引导区写代码,不会破坏系统,更不会破坏MBR。
    2. 方便。可以随时重新启动系统,进入别的操作系统,如DOS 6.22、DOS 7 、Linux和其他系统环境,而不需要独立的分区,更不用管放置启动镜像盘的分区格式是NTFS还是FAT32。
    3. 完全用内存虚拟软盘,加载后可以格式化存放原来的引导镜像的硬盘,或者进行Ghost操作。图四:虚拟软盘让你从NTFS分区启动DOS图注 虚拟软盘让你从NTFS分区启动DOS
  3. 注意事项

    在我们使用vFloppy虚拟软盘引导系统时,还需要注意以下问题。

    1. 如果C:用的NTFS,并且使用了磁盘压缩的请确保C:\Boot目录及其下面的文件没有被压缩。
    2. 运行vFloppy,只是根据你的硬盘情况生成相应的引导文件vLoader.bin和虚拟软盘vMemdsk.bin文件,绝对不会重写MBR。
    3. vMemdsk.bin定位磁盘镜像anyos.img时是直接通过该文件所在的磁盘扇区,而不是通过文件系统来进行的,从而实现对NTFS、FAT32和FAT的支持。即使删除了该文件,只要所在扇区的数据还没有被覆盖,或许仍然能够启动该磁盘镜像,但进行磁盘整理后可能造成无法启动,只需要重新运行一下vfloppy即可。
    4. vfloppy.exe 的参数可以是绝对路径,如:
      vfloppy -1 c:\Boot\vLoader.bin -2 c:\Boot\vMemdsk.bin -i c:\img\dos.img

应用实例

vFloppy的优点介绍了这么多。我们还是通过实例来说明它如何帮我们完成那些很实用的功能。

Ghost

用Ghost 恢复系统的时候,需要一个软盘或者光盘来启动,而使用vFloppy可以在仅有硬盘启动的时候,用备份的ghost文件覆盖当前的系统分区。

Knoppix

vFloppy一个用途就是可以把在光盘上运行的Knoppix 系统方便的放到硬盘上,而不需要对系统重新分区.只需要把Knoppix光盘上的文件直接拷贝到硬盘,然后让OS Loader 通过虚拟软盘的方式加载Knoppix的启动镜像文件就可以了.

如果CD-ROM的盘符是E,我们想在D盘上运行KNOPIX,则

cd E:\KNOPPIX
mkdir D:\KNOPPIX
copy KNOPPIX D:\KNOPPIX\

从OS Loader 加载的虚拟软盘启动后,KNOPPIX会自动在硬盘上扫描KNOPPIX文件夹和KNOPPIX文件。

这样既可以享受Knoppix的便捷,很方便的更新Knoppix到最新版本,又不需要刻录光盘,而且光盘运行Knoppix会比硬盘慢。

虚拟软盘的原理

前面我们介绍了vFloppy是如何工作的。针对有兴趣的朋友,笔者愿意分享我开发的心得和源代码。

同前面的过程类似,就是生成一个引导扇区文件DBR,让OS Loader加载并运行,然后这个DBR文件加载硬盘上的磁盘镜像文件anyos.img,最后把控制权引导到该镜像文件。

vFloppy执行如下语句:
vFloppy -1 vLoader.bin -2 vMemdsk.bin -i anyos.img

实际完成了两个操作:

  1. vfloppy 计算anyos.img镜像文件在磁盘上所占用的绝对扇区地址,把扇区地址写入到vMemdsk.bin中的预定位置。这样在引导系统的时候,就不需要操作系统的支持而读取anyos.img镜像文件。
  2. vfloppy 计算vMemdsk.bin文件在磁盘上所占用的绝对扇区地址,然后把扇区地址写入到vMemdsk.bin和vLoader.bin中的预定位置。

用OS Loader启动vfloppy的过程

用OS Loader引导vFloppy虚拟的软盘镜像,其实和OS Loader下引导Windows 98类似。

  1. BIOS自检后,加载并运行硬盘的主引导纪录——MBR。
  2. MBR中的相应代码检测分区表,然后加载活动分区的引导纪录——DBR。本例中DBR就是OS Loader。
  3. OS Loader加载相关的程序,然后显示启动菜单,接受用户的命令(选择启动vFloppy或者其他)。
  4. 如果选择vFloppy,则控制权转给vFloppy的启动代码vLoader.bin。
  5. vLoader.bin根据执行vFloppy时记录的vMemdsk.bin文件的扇区地址,加载vMemdsk.bin并将转移转给它。
  6. vMemdsk.bin根据执行vFloppy时记录的anyos.img文件的扇区地址,读入anyos.img文件。
  7. vMemdsk.bin把对软驱的访问重定向到内存,也就是用内存模拟一个软驱。
  8. vMemdsk.bin的代码加载模拟软驱的引导扇区,从而从虚拟软驱引导系统。

和PartitionMagic与 Drive Image自带的虚拟软盘对比

如果用过PartitionMagic的人就知道, 它运行时如果是对非系统分区的调整则不需要重新启动就可以进行,而对系统分区进行调整(如扩张或者收缩系统分区),会要求重新启动,并且重启之后直接启动到DOS进行调整分区的工作的,不会出现OS Loader的启动菜单。 WinNT内核系统如Win2000/WinXP等同样如此。据分析, PartitionMagic有一个程序能将系统启动到虚拟软盘中,这种虚拟软盘用的实际就是IMG格式的未压缩的映像,可以使用WinImage来编辑,Drive Image同样带有类似的虚拟软盘。

那么为什么我不直接使用PartitionMagic的虚拟软盘呢?这是因为:

  1. 安全。PartitionMagic 的虚拟软盘的引导程序是放在MBR中的,并且占据磁盘开始的3个扇区,也就是说vfloppy.sys安装的时候,需要向从MBR开始的3个扇区写数据,这样如果此时发生错误,将可能使得系统无法引导。
  2. 冲突。由于“向从MBR开始的3个扇区写数据”,有可能和其他的启动管理程序冲突,如Smart Boot Manager也需要这些扇区空间,PartitionMagic的虚拟软盘的安装代码将会覆盖它,并且是永久覆盖,不会恢复。
  3. 不灵活。PartitionMagic 的虚拟软盘执行前,将会恢复主引导记录MBR,从而在系统启动的时候,我们无法选择需要启动的操作系统。

虚拟软盘的源代码

笔者在参考了GRUB 0.93的源代码和PartitionMagic 的vFloppy.sys 的反汇编代码后,实现了一个类似PartitionMagic 的vFloppy.sys的虚拟软盘系统。

  1. 系统构成

    该系统主要包括3个模块:

    1. 引导扇区文件vLoader.bin

      在vfloppy\loader目录的vloader.asm中,作用就是根据vFloppy.exe记录在该文件内部的关于vMemdsk.bin文件的扇区列表,加载vMemdsk.bin,并执行。这个模块的代码必须限制在512个字节以内。由于512字节大小的限制,引导扇区文件仅仅记录了vMemdsk.bin文件第一个扇区的地址,然后通过vMemdsk.bin文件第一个扇区继续加载vMemdsk.bin的其他扇区。

    2. 模拟软驱程序vMemdsk.bin

      在vFloppy\loader目录的vmemdsk_start.asm和vFloppy.sys中。其中vFloppy.sys文件来自PartitionMagic 7的虚拟软盘的文件,vmemdsk_start.bin则继续vLoader的工作,并加载vFloppy.sys。
      vMemdsk.bin=vmemdsk_start.bin+vFloppy.sys

      vFloppy.sys负责读取软盘镜像文件,并虚拟一个软驱。

    3. 主程序vFloppy

      由vfloppy\loader目录的install.c、fat_blocklist.c、NTFS_blocklist.c、blocklist.c和Win32.c 等文件组成。笔者从GRUB中中抽取了部分读取NTFS 和FAT分区的代码,所以很多头文件都在GRUB的目录下面。

      vFloppy.exe除了计算镜像文件的扇区列表外,还要给PartitionMagic的Vfloppy.sys传递镜像文件的参数。相关参数这里就不再详细说明,可以到我们的网站下载源代码及相关说明说明。

  2. 编译

    本文提供的源代码可用Mingw32Nasmw编译。附上的文件包括了打了ISO9660和NTFS补丁的GRUB0.93以及vfloppy的所有源代码。

    编译的方法很简单,执行进入vfloppy目录,执行loader目录的mkmemdsk.bat文件,就完成了loader的编译,然后在vfloppy目录执行Mingw32的make编译vfloppy的win32部分的可执行代码。

vfloppy展望

  1. 提供对Win9x和DOS的支持。源代码中包括了一个不是很完善的DOS版本,但仅仅支持FAT分区。
  2. 重写vMemdsk.bin核心代码,使其支持1.28G以上的硬盘(需要BIOS的支持),支持大的镜像文件,支持ISO文件,支持磁盘切换,支持内存写盘,支持保存内存盘的修改。如果一切顺利的话,可以在2004年底之前完成。
  3. 直接处理文件系统,类似于一个精简版本的GRUB。

77 Comments

  1. kDolphin Comments @ 18:52:24 on 2005-01-02

    GRUB应该更强大和易使用。

  2. 猪团团 Comments @ 23:14:52 on 2005-01-02

    GRUB还不是非常稳定.
    我在一台机器上 40G硬盘, 2000 server.
    从第30G处安装fedora core 3. 除了boot分区外都不是主分区.
    用GRUB管理后. 2000就无法启动了.. 选择2003启动后就黑屏…
    所以现在我从2000上装了vmware来使用fedora.

  3. kDolphin Comments @ 23:46:01 on 2005-01-02

    GRUB在我的机器上还算稳定。或许我的系统比较单一,一个winxp和一个debian而已。

  4. Rainux Comments @ 18:39:31 on 2005-02-19

    楼主去 CCF 吗?
    我记得这个是 CCF 的软件版版主做的……

  5. Rainux Comments @ 18:43:35 on 2005-02-19

    回头仔细一看,着实汗颜,原来这个 blog 不止一个作者。
    偶还是觉得 GRUB 更爽。

  6. Dark Comments @ 20:36:50 on 2005-02-19

    呵呵,lyh的文章在CCF外的朋友很难看到,我们共同在这儿写Blog

  7. qken Comments @ 10:29:43 on 2005-03-17

    谢谢作者
    我在使用过程中有一个问题:在win2003上用不了,第一次安装时出提示“设置引导映像过程中发生错误,你希望查看运行日志么”,以下是运行日志的内容:

    映象文件在硬盘上的位置:(hd0,0)

    引导文件所在的路径:c:/boot/bootdisk.bin

    执行代码文件的位置:c:/boot/bootdisk.dsk

    映象文件所在的路径:c:/boot/bootdisk.img

    执行返回结果:

    dir failed /boot/bootdisk.dsk, 15
    fat blocklist failed

    查看c:\boot,有三个文件存在,bookdisk bookdisk.bin bookdisk.dsk,img
    但boot.ini 没有任何变化。

    再次单击 应用,则提示设置成功,boot.ini 已添加了 虚拟软盘启动项目 ,但重新启动时不能从虚拟软盘启动成功。
    不知问题出在哪方面?

  8. 想像的颜色 Comments @ 18:42:55 on 2005-03-25

    我的情况和上面的兄弟一样,也是2003的系统,出现同样的错误提示,但是提示成功后无法从虚拟软盘启动,请求帮助

  9. lyh728 Comments @ 14:58:11 on 2005-03-28

    to qken:
    和操作系统没有关系,我写vfloppy 用的就是2k3 , 出现
    dir failed /boot/bootdisk.dsk, 15
    fat blocklist failed
    这个错误的原因是
    os 缓存了 bootdisk.dsk 这个文件,执行vflooy 的时候还没有写入硬盘,而我的程序是跨过os直接从 硬盘来读取文件信息的,所以这个时候无法 读取文件,

    解决办法是 复制完镜像文件后,稍等一会,再执行vflooy 或者用 其他的刷新os缓存的工具使得文件写入硬盘,极端的办法是 restart ,then run vfloppy again

  10. lyh728 Comments @ 14:59:09 on 2005-03-28

    to 想像的颜色

    你的信息太少, 无法判断

  11. cansblog Comments @ 22:55:58 on 2005-03-30

    请问在哪儿可以下载到源码?我的信箱duchanglai@hotmail.com,大家帮帮忙,发给我一份

  12. 西岭 Comments @ 21:19:32 on 2005-04-29

    有何办法给加密的软盘做一个镜像?偶的本本软驱坏了。
    hth.exe 只能复制物理软盘,
    WinImage对加密软盘无效,
    Vfloppy也是如此!!
    HELP!!!!!!
    多谢回复hzh20040526@263.com

  13. shrine007 Comments @ 14:54:32 on 2005-07-30

    我的问题和
    qken 想像的颜色 一样.
    兄长,你还没回答 qken 的问题
    即便景象做成功了, 启动后仍然无法被引导..!!!
    谢谢

  14. 我的vfloopy 无法使用 Comments @ 23:44:28 on 2005-07-30

    启动vfloopy.exe ,按提示指定镜像文件目录和boot.ini 目录,但出现如下提示:“设置引导映像过程中发生错误,你希望查看运行日志么”,以下是运行日志的内容:
    映象文件在硬盘上的位置:

    引导文件所在的路径:

    执行代码文件的位置:

    映象文件所在的路径:

    执行返回结果:

    -1: c:/boot/bootdisk.bin
    -2: c:/boot/bootdisk.dsk
    -i: c:/boot/bootdisk.img
    win32.c(268):win32_open 设备未就绪。

    ioctl failed
    win32.c(535):win32_close 句柄无效。

    CloseHandle failed
    win32.c(268):win32_open 设备未就绪。

    ioctl failed
    win32.c(535):win32_close 句柄无效。

    CloseHandle failed
    fat blocklist failed

    我在win2000sp4 winxp sp1, winxp sp2下尝试均出现如上提示。请问如何解决?? 跪求!!! 我的笔记本电脑软驱丢失,想升级bios 和 安装一键还原。

  15. whywhy Comments @ 14:28:55 on 2005-08-12

    我在等待新版本的vfloopy。希望支持更大的映像文件。

  16. 新新 Comments @ 20:50:04 on 2005-08-26

    请问,取得一个映像文件的C/H/S参数的算法是什么?
    private sub(filepath as string,c as integer,h as integer,s as integer,validity as boolean)
    ‘怎么写算法?
    end sub

  17. lyh728 Comments @ 23:44:43 on 2005-08-26

    对于软盘镜像,好像没有什么算法吧
    360k 单面低密度
    720k 是单面高密度
    1440k是双面高密度
    2880k 等类推

    这些数据都是固定的

  18. lyh728 Comments @ 23:46:12 on 2005-08-26

    映象文件在硬盘上的位置:

    引导文件所在的路径:

    执行代码文件的位置:

    映象文件所在的路径:

    执行返回结果:

    -1: c:/boot/bootdisk.bin
    -2: c:/boot/bootdisk.dsk
    -i: c:/boot/bootdisk.img

    你的镜像文件不存在阿

  19. 景阳岗 Comments @ 16:35:16 on 2005-09-06

    请问win98下怎样使用虚拟软驱,急求!!!
    方便的话请回复至本人邮箱,ZHANGQINGW@TCL.COM,谢谢

  20. 景阳岗 Comments @ 16:35:23 on 2005-09-06

    请问win98下怎样使用虚拟软驱,急求!!!
    方便的话请回复至本人邮箱,ZHANGQINGW@TCL.COM,谢谢

  21. lyh728 Comments @ 09:48:14 on 2005-09-07

    win98 下要用dos 版本的,不过 在 win98下 可以直接运行dos,意义不大阿

  22. xiangz Comments @ 21:43:48 on 2005-09-13

    同样的错误
    dir failed /boot/bootdisk.dsk, 15
    fat blocklist failed

    很失望,操作系统winxp sp1 英文版, c:\是ntfs系统。

  23. lyh728 Comments @ 21:58:22 on 2005-09-13

    reboot,and try

  24. txljb Comments @ 10:57:10 on 2005-09-22

    我在98系统上,用xp安装盘做了osloader,用虚拟盘做了ghost网络盘的镜像,这样启动的时候可以出现选单,但当我用ghost 全盘复制到其他盘上后,复制后的硬盘的虚拟软盘启动无效,一直显示load.,而源盘仍正常。。。

  25. xiaoge Comments @ 15:08:34 on 2005-09-22

    请问有源代码可以下载吗?可否给小弟发一份。http://online.cniti.com/网站无法打开!

  26. lyh728 Comments @ 13:53:15 on 2005-09-25

    ccf 可以下载源代码

  27. alei1977 Comments @ 11:37:49 on 2005-09-27

    刷新os缓存的工具都有哪些呢?我想写一个刷新os缓存的工具,有什么建议和提示吗?
    我牙根不知道从什么地方入手

  28. lyh728 Comments @ 12:29:44 on 2005-09-27

    sysinternal 下载 sync.exe

  29. alei1977 Comments @ 12:32:32 on 2005-09-27

    那请问关于刷新os缓存采用的是什么技术呢?微软有这方面的API吗?

  30. lyh728 Comments @ 12:36:58 on 2005-09-27

    获取物理硬盘或者分区的句柄,调用win32api 里面的flush

  31. alei1977 Comments @ 13:04:22 on 2005-09-27

    我可以通过msn和你联系吗?这样我知道一些了,但是具体我还是从msdn上没法获得所需的信息,唯一找到的flushcache是CE的,而且好像和我需要的不是一回事情.
    我的msn: lemmel@263.net

  32. lyh728 Comments @ 15:32:12 on 2005-09-27

    FlushFileBuffers

    Remarks
    The WriteFile and WriteFileEx functions typically write data to an internal buffer that the operating system writes to disk on a regular basis. The FlushFileBuffers function writes all of the buffered information for the specified file to disk.

  33. alei1977 Comments @ 16:43:46 on 2005-09-27

    谢谢

    这个函数我之前也调查过,但是当时同事对我说了句,说这个只能对文件起作用,不能对一个磁盘或者分区, Remarks里面也提到了是the specified file。 我明天会做一下测试,看能否可用

  34. lyh728 Comments @ 16:58:41 on 2005-09-27

    winnt用FlushFileBuffers,
    win9x用DeviceIoControl

    似乎sync。exe是这样的

  35. lyh728 Comments @ 17:00:55 on 2005-09-27

    主要是我不常用msn,所以没有加你

  36. alei1977 Comments @ 17:56:04 on 2005-09-27

    我用PE工具察看了下sync,里面确实用了这两种函数,我还没弄明白DeviceIoControl他用了什么参数,非常感谢你的帮助,明天我做下测试看看结果

  37. iamgs Comments @ 15:27:10 on 2005-09-28

    vfloppy超级不稳定啊,经常启动后显示一个“load”后就不动了,重装它后又好了,过一阵又坏了,如此反复……关键时候才不敢指望它哦,实在想找一款稳定的虚拟软区用。

  38. lyh728 Comments @ 16:54:14 on 2005-09-28

    sorry

  39. hbyyan Comments @ 09:24:23 on 2005-10-05

    您好:
    也不知道该怎么称呼你,只好叫您雨轩了,呵呵……
    我在您的BLOG里找到了一篇介绍关于VFLOPPY的文章,很感谢您,但是有点东西我没有懂,我很菜!!特地向您请教,我找不到您的联系方式,知好跟了这个帖子,别见怪啊!
    问题如下:
    我是网吧的,有150台机器,都是XP系统,您知道,XP是没有DOS的,所以如果想刻硬盘的话就的用光驱和软驱引导,而且还得多借几个,不然150台得N年才能刻完,所以我想是不是可以用VFLOPPY呢?问题就出现在这里。
    1:安装了VFLOPPY后,启动的时候是不是会出现多系统引导呢?来上网的人看到了这个可能会乱弄的,是否可以在BOOT。INI文件中修改,比如修改成启动显示的时间为0秒,第一启动问XP?
    2:如果我安装了VFLOPPY后,我想重新安装XP。过程如下
    启动到DOS里,执行FOMAt /s /c:
    格式化系统分区,那么这个时候VFLOPPY还存在吗?也就是说我在执行完格式化命令后还能通过下面的这个方法继续重新安装XP吗?(比如我的安装文件放在E盘下:在DOS里E:\cd xp\i386\winnt)如果可以的话,那么安装完后VFLOPPY还存在吗?

    求求您帮帮我吧,在网上问了很多人,人家都不理我。就拜托您了。

  40. lyh728 Comments @ 09:26:47 on 2005-10-05

    看不懂,翻译一下

  41. Dark Comments @ 12:00:58 on 2005-10-05

    lyh兄,那个是广告,已经做了处理。上面还转来一篇回复。

  42. lyh728 Comments @ 15:20:23 on 2005-10-05

    1 可以在boot.ini修改
    [boot loader]
    timeout=1
    default=multi(0)disk(0)rdisk(0)partition(2)\WIN2K3
    [operating systems]
    multi(0)disk(0)rdisk(0)partition(2)\WIN2K3="Windows Server 2003, Standard" /fastdetect
    C:\boot\vloader.bin=" "

    这样启动菜单的第2个项显示为空格,看起来就似乎仅仅有xp的启动

    2 格式化后,c 盘不存在 vf 了,但是不要reboot,这个时候可以继续运行e盘上winnt.exe 才安装xp
    安装完后VFLOPPY当然不存在,需要的可以重新安装

  43. 年逾花甲老人 Comments @ 19:07:37 on 2005-10-13

    我用vfloppy安装了虚拟软驱,但是启动时却不出现“由虚拟启动软盘启动”菜单

    。下面是电脑的 C:\boot.ini 文件(需要说明的是,硬盘的第1,2分区已经被隐藏,分别安

    装有XP,W98.这里的C盘其实是硬盘的E分区)

    [boot loader]
    timeout=30
    default=multi(0)disk(0)rdisk(0)partition(3)\WINDOWS.0
    [operating systems]
    multi(0)disk(0)rdisk(0)partition(3)\WINDOWS.0=”Microsoft Windows XP Professional” /noexecute=optin /fastdetect
    D:\BOOT\98qidong.bin=”由虚拟启动软盘启动”

    下面是执行结果:

    映象文件在硬盘上的位置:(hd0,4)

    引导文件所在的路径:d:/boot/98qidong.bin

    执行代码文件的位置:d:/boot/98qidong.dsk

    映象文件所在的路径:d:/boot/98qidong.img

    执行返回结果:

    stage1(31942353)
    version=0.1
    boot_drive=ff
    force_lba=1
    stage2_address=0×8000
    stage2_sector=31942353
    stage2_segment=0×800
    stage2(31942353+56)
    disk image(31939361+2880)
    disk image size 1440k

    是不是要求配置文件的路径和保存路径的路径一致所致?因为我误认为否则就不会分开提出了,所以我的这两个不一样一个是C:,一个是D

    请指教!

  44. lyh728 Comments @ 19:15:03 on 2005-10-13

    但是启动时却不出现“由虚拟启动软盘启动”菜单

    这样的话,说明ntldr 有问题,根本没有到vf的阶段

  45. cart Comments @ 13:21:08 on 2005-11-18

    thank you

  46. Mico Comments @ 22:27:37 on 2005-11-27

    用vfloppy装系统,
    当copy完文件后,提示要重启,说是重启后继续安装
    可是重启就进入了启动菜单~~~
    根本就没进入安装画面
    是不是哪里出了问题?

  47. 拒绝正版 Comments @ 17:40:38 on 2005-12-24

    这软件真是鸡肋!!!我十台电脑有9台启动到 load 就不动了。软件不完美。还是不做了吧!害人害己!

  48. lyh Comments @ 15:57:58 on 2005-12-27

    拒绝正版 ,你那是什么破电脑,丢掉算了

  49. sequh Comments @ 16:47:32 on 2006-02-02

    谈谈在VFloppy+GHOST下的问题,首先应该用干净的软盘启动DOS来做GHOST,或者干脆用VFloppy启动后作GHOST,否则会出现LOAD LOAD后就不引导虚拟软盘了。

    但即便这样还是发现了问题,用VFloppy启动后自动GHOST恢复系统后,进入XP然后再重新启动,这时发现VFloppy又无法启动了,需要重新做一遍VFloppy才可以。

    我感觉可能是XP在运行时修改了虚拟软盘映像所在的磁盘扇区导致VFloppy找不到映像的原因。不知是否真得如此,有没有什么解决办法。

    另外希望VFloppy1.5能提供命令行执行的方式,这样可以方便地自动重做映像。

    另外VFloppy1.5的源代码能否见赐:sequh@126.com

  50. 原谅我今天 Comments @ 19:07:02 on 2006-02-03

    程序的需要,我用的双系统,因为VFloppy在dos ,ntfs分区下不知道如何操作,我的使用方法是这样的,C盘WIN2K,D盘WINXP C盘是FAT32分区,其它分区都是NTFS,在C盘放个GHOST8.2,所有设置做好后,然后安装VFloppy,转到虚拟软盘DOS下,运行C盘目录里的GHOST8.2,备份C和D盘到其它分区,以后不管哪个系统不好使就直接恢复哪个分区。我想把C盘也改成NTFS,但是不知道改好后,虚拟软盘怎么运行NTFS下的ghost8.2,哪位高人能否指点。

  51. lyh728 Comments @ 11:04:31 on 2006-02-06

    to sequh ,
    vfloppy 本来就是命令行的界面,gui界面是别人写的,包装了命令行的参数,我只有命令行的代码,gui的没有
    to 原谅我今天,
    可以把ghost8放到 软盘镜像里面,或者使用ntfs for dos

  52. qdren Comments @ 12:53:24 on 2006-02-14

    我的系统是WinXP-SP2,我用的虚拟软驱是由Vfloppy加载NTFS.img产生的。但有个怪问题:
    当由GHOST恢复了系统后,下次再想GHOST时,由虚拟软驱进入DOS,马上就死机啦,很是奇怪?此时,只有再次进入系统,重新用Vfloppy加载NTFS.img,再着手处理就正常了。到底什么原因呢?
    我看了详细说明,但不懂:在C:\BOOT\放上vfloppy.exe后,一旦运行,就提示:
    can not create file “c:\boot\vFloppy.exe.”另一个程序正在使用此文件,进程无法访问。而你的说明里面:假如c:\boot\vFloppy,却让人看到在C:\BOOT\可以放置vfloppy.exe并能够运行的,原因何在?

  53. lyh728 Comments @ 18:45:42 on 2006-02-14

    to qdren:

    1· 当由GHOST恢复了系统后,下次再想GHOST时,由虚拟软驱进入DOS,马上就死机啦,很是奇怪?此时,只有再次进入系统,重新用Vfloppy加载NTFS.img,再着手处理就正常了。到底什么原因呢?

    这个是必须的,因为vf按照扇区定位,可能ghost 后扇区位置不一样

    2 can not create file “c:\boot\vFloppy.exe.”另一个程序正在使用此文件,进程无法访问。

    你用的gui版本吧,这个版本不是我写的,不太清楚

  54. nbw Comments @ 12:04:06 on 2006-03-10

    你好。我看你的文章,说曾经写过一个虚拟软盘的程序,我想学习一下你的源代码,但现在无法下载了,你可以给提供一下么?多谢!我的邮箱(后台可见):

  55. spark Comments @ 20:13:02 on 2006-03-24

    我是最近才用的这个软件,感觉不错,没有出现以上诸位所说的错误,偶用的是1.5版。

  56. sequh Comments @ 20:24:31 on 2006-05-13

    命令行的代码能发给我吗?
    我的妈妈在老家,系统出问题了就不能上网了,总是等到我过年回家了再给她弄好。
    本来这次过年想彻底搞定这个问题,用了vFloppy,感觉就差那么一点点了。所以希望自己来修改一下源代码,按我的思路。
    我的邮箱:sequh@126.com

  57. tans Comments @ 18:23:28 on 2006-06-01

    真是奇怪,昨天下了1.0的用了以后很好,今天看到V1。5的,就按正常的方法卸载了1.0,装了1.5奇怪的是提示设置成功了,从启动电脑在进入软驱时,启动不了,于是卸掉1.5再用1.0的也一样启动不到DOS,我是2003系统,我不知道这个软件到底怎么才能彻底卸掉,(我是按照说明卸的,可以肯定没有问题),请问怎么解决,我很需要这软件

  58. redong Comments @ 14:23:01 on 2006-06-21

    老兄,可以发命令行的源码给我吗?
    有急用!!!
    orange_red@126.com

  59. lotte Comments @ 15:53:33 on 2006-06-24

    伤心的错误啊~
    映象文件在硬盘上的位置:(hd0,0)

    引导文件所在的路径:c:/boot/bootdisk.bin

    执行代码文件的位置:c:/boot/bootdisk.dsk

    映象文件所在的路径:c:/boot/bootdisk.img

    执行返回结果:

    dir failed /boot/bootdisk.dsk, 15
    fat blocklist failed
    自从从新装了一个160G的硬盘, 重装系统之后(在新硬盘上),再用vflooy就一直 不好用了,在进入XP之前除了正常的系统只有一个《 从软驱 》也不知道是什么原因啊。当点击后还有错误说文件system\hal.dll文件损坏或者丢失。真是好郁闷了啊

  60. lyh Comments @ 09:00:09 on 2006-06-25

    lotte,

    vfloppy does not support 160g

  61. conlier Comments @ 11:26:54 on 2006-06-27

    我现在系统是linux 装在hd1上,另外有个没装完得xp在hd0上,装这两个系统得时候都是单硬盘装的,所以启动信息不在一起,现在我的机器光驱坏了,没有启动盘,想用vfloppy从硬盘启动下从硬盘装xp,所以我在linux下把hd0 mount上,然后用wine运行vfloppy,好像不行,有什么办法能给hd0装上vfloppy吗?如果方便的话能给我回封mail吗?如果又源代码更好了

  62. conlier Comments @ 11:29:24 on 2006-06-27

    我现在系统是linux 装在hd1上,另外有个没装完得xp在hd0上,装这两个系统得时候都是单硬盘装的,所以启动信息不在一起,现在我的机器光驱坏了,没有启动盘,想用vfloppy从硬盘启动下从硬盘装xp,所以我在linux下把hd0 mount上,然后用wine运行vfloppy,好像不行,有什么办法能给hd0装上vfloppy吗,或者有什么办法能在hd0装个dos?如果方便的话能给我回封mail吗?如果有源代码更好了。

  63. conlier Comments @ 11:31:25 on 2006-06-27

    邮箱是conlier@gmail.com

  64. 木头 Comments @ 18:19:24 on 2006-07-18

    你好:
    此软件给我的感觉非常好,但是我在用GHOST备份时(不管是保存为.GHO映像或是DISK-DISK)都不行,在被拷出来的盘进虚拟软驱启动时出现LOAD画面就不动了.希望能和你沟通沟通,如果解决这一问题对我有很大的帮助.

  65. lyh Comments @ 22:41:34 on 2006-07-18

    to 木头:
    出现load,代表虚拟软驱已经加载了镜像,跳到镜像开始执行镜像的引导代码了.

    你换一个镜像文件试试看

  66. lyh Comments @ 22:44:04 on 2006-07-18

    to conlier:

    如果是linux 的话,你可以安装一个grub ,然后用grub里面的memdisk 引导一个dos盘,然后安装xp

  67. zhouxiao Comments @ 20:13:51 on 2006-07-24

    我这边增减硬盘似乎经常会导致制作的引导镜象无法引导,以及制作成功率降低,这是什么原因?

  68. leftkey Comments @ 23:12:48 on 2006-07-24

    我用了很久,有一个问题。装了vfloppy做成ghost镜像恢复之后由虚拟软盘启动不行,停在load那里。
    另能不能发一个vfloppy命令模式的程序给我,谢谢。

  69. K Comments @ 09:23:40 on 2006-07-27

    dir failed /boot/bootdisk.dsk, 16
    fat blocklist failed
    xpsp2,ntfs
    何故?(重启无效~)

  70. acne Comments @ 16:55:21 on 2006-12-22

    我也遇到“fat blocklist failed”的问题,windows2003,ntfs的文件系统,等待半天再重装业不行,应该是ntfs的问题吧?

  71. Jorkin Comments @ 08:23:42 on 2006-12-26

    Win2003出现fat blocklist failed错误可以这样解决

    到 cmd下 运行

    attrib c:\boot.ini -r -s -h

    我就是这样成功的。

    成功之后再运行

    attrib c:\boot.ini +r +s +h

  72. wzryy Comments @ 10:12:16 on 2007-01-03

    你好,我用vfloppy1.5很久了,有个问题请教下,就是经常会出现由虚拟软盘启动停在load那里,我一直找不到原因所在.因为很多时候又是正常的.谢谢

  73. ezhangyu Comments @ 23:05:53 on 2007-02-16

    我的明基S73EG笔记本使用BENQ的BOIS升级程序升级BOIS,在机器重启时提示“err 4:Vfloppy failed”,按任意键机子启动进入XP,提示BOIS升级失败,以后每次启动机子时都有这个提示,要按键后才能进入启动,请指教应如何解决?谢谢!

  74. 我的也是这样 Comments @ 19:38:38 on 2007-05-27

    我用VFLOPPY+GHOST8.2,经常出现到了LOAD就不动了。 有时候重新用vfloppy安装一次img文件又可以用。 有时候又不行了
    有高手能解释解决这个问题吗? 好多人提到了这个,没见到解决办法!

  75. 虾米虫 Comments @ 02:36:42 on 2007-08-15

    dir failed /boot/bootdisk.dsk, 15
    fat blocklist failed

    我也觉得很奇怪.之前我硬件方面没有任何改变,驱动程序也是一样的版本.我手动将系统恢复以后.重新再使用V还是一样这个提示.

    回忆了一下…我似乎刷过BIOS
    难道会是因为这个???

  76. 虾米虫 Comments @ 02:37:19 on 2007-08-15

    补充一下.我系统盘依然是FAT32

  77. netbray Comments @ 11:50:58 on 2007-10-13

    我前两个月买了款hp的本本,想系统备份,就在网上下了最新版本的一键还原精灵,安装时谁知软件有问题,没装上。没装上也就罢了,谁知造成在开机时出现:
    :…
    Err 5:Error finding VFLOPPY.SYS
    Err 8:Fake Floppy driver not found
    Press any key
    这样的界面,让人很是烦恼。不知哪位高手能帮我搞定它,让他永远消失。万分感谢!小弟给你作揖了。