这是 c:\boot.ini的内容
[boot loader]
timeout=6
default=multi(0)disk(0)rdisk(0)partition(1)\WINDOWS
[operating systems]
multi(0)disk(0)rdisk(0)partition(1)\WINDOWS="Microsoft Windows XP Professional" /fastdetect
C:\ = "Microsoft Windows"
是控制 2k or xp 的引导程序,如果要在里面加一段 C:\DOS = "MSDOS 7.0" 该怎么写这段程序呢?
直接在ini里面该是没有效果的,因为还需要在引导扇区里面写入相应的信息。
大家有何高见呢?

解决方案 »

  1.   

    超级猛料里的WIN2000中的磁盘扇区读写在WINNT和WIN2000中磁盘被看做一种标准设备,可以使用CreateFile象打开文件一样打开并存取。CreateFile支持两种方式的磁盘设备--逻辑磁盘(格式为"\.:")和物理磁盘(格式为"\.",其中x为数字),例如打开A:盘进行读取操作,只要这样:HANDLE hDev=CreateFile("\\.\A:",GENERIC_READ,FILE_SHARE_WRITE,0,OPEN_EXISTING,0,0);如果得到的句柄有效,就可以使用ReadFile来读取了,ReadFile(hDev,Buffer,512,&dwRet,0);读取结束要关闭该句柄,CloseHandle(hDev);这比WIN95/98下的磁盘扇区读取方便多了。另外,上面的例子是操作逻辑磁盘的,它包括软驱、硬盘分区等;物理磁盘指的是实际的硬盘,它不关心该硬盘被分成几个区,硬盘的编号是从0开始的,"\."表示第一块硬盘,其它依此类推。大家可能马上会想起,利用这种机制可以对硬盘的分区表进行存取了。确实如此,此时便可以对硬盘的主引导扇区(独立存在的一个扇区,包含分区表信息,不同于磁盘分区的BOOT区)进行操作了。unsigned char Buffer[512]={0};HANDLE hDev=CreateFile("\\.\PHYSICALDRIVE0",GENERIC_WRITE,FILE_SHARE_WRITE,0,OPEN_EXISTING,0,0);WriteFile(hDev,Buffer,512,&dwRet,0);CloseHandle(hDev);危险!!!千万别这么做!!!五、一个自适应的磁盘读写类由上面的例子可以看出,不同的操作系统下对磁盘扇区的读写有不同的方式,为了能够在各类操作系统下能够使用统一的方法读写磁盘扇区,特设计了一个通用类。该类的设计思想如下:首先编写各类操作系统下的磁盘扇区存取函数,然后通过GetVersionEx来判断操作系统,进而选取对应的函数来实现磁盘扇区的读写。由上面的分析可知,WINDOWS操作系统对INT13的支持是最差的,所以在这里只使用INT25、INT26、INT21--7305等中断调用来实现。类的定义如下:class CDiskInfo{public:CDiskInfo();~CDiskInfo();private:HANDLE hDev;DWORD dwCurrentPlatform;void GetPlatform(); //取得操作系统,并存入变量dwCurrentPlatform BOOL Win2000_AccessSectors(WORD CMD,BYTE bDrive,DWORD dwStartSector,WORD wSectors,LPBYTE lpSectBuff);//用于WIN2000、WINNT等操作系统,BOOL Int25_ReadSectors(BYTE bDrive,DWORD dwStartSector,WORD wSectors,LPBYTE lpSectBuff);BOOL Int26_WriteSectors(BYTE bDrive,DWORD dwStartSector,WORD wSectors,LPBYTE lpSectBuff);//用于WIN95以前的操作系统BOOL Int21_AccessSectors(WORD CMD,BYTE bDrive,DWORD dwStartSector,WORD wSectors,LPBYTE lpSectBuff);//7305功能实现,用于WIN95OSR2、WIN98等操作系统public://对外统一提供Read和Write操作,类内部根据平台选用适合的函数调用BOOL ReadSectors(BYTE bDrive,DWORD dwStartSector,WORD wSectors,LPBYTE lpSectBuff);BOOL WriteSectors(BYTE bDrive,DWORD dwStartSector,WORD wSectors,LPBYTE lpSectBuff);};该类对外提供了两个接口,即ReadSectors和WriteSectors,其参数是一样的,分别是要读写的磁盘编号bDrive,要存取磁盘的开始扇区号dwStartSector,要读取的扇区数wSectors和读写扇区数据的缓冲区lpSectBuff。这里磁盘编号是从1开始的,即1代表A:,2代表B:,3代表C:,依此类推。扇区的编号从0开始。使用时也很简单,只要作如下声明即可:BYTE Buffer[1024];CDiskInfo A;BOOL bRet=A.ReadSectors(1,0,2,Buffer);详细情况见附带的类文件及测试程序。六、补充说明严格来说,在对磁盘进行读写时,应该遵循以下顺序:打开设备(WIN95/98下为VWIN32服务,WIN2000下为磁盘设备)、锁卷、验证卷的有效性、读/写、开锁卷、关闭设备。这里为了描述上的简洁,忽略了锁卷/开锁卷及验证有效性等操作。有兴趣的朋友可以自行添加。另外,该类仅实现了逻辑驱动器的读写,要想实现诸如对物理硬盘的主引导扇区的读写,还需要其它技术,如thunk技术,即编写两个动态库,一个是WIN32动态库,一个是WIN16动态库(thunk技术只可以用动态库实现),其中WIN16动态库转到DPMI模式,调用INT13(或者扩展INT13)来实现物理磁盘扇区的读写。有关thunk技术请参阅相关文档资料。所有的例子在WIN98、WIN2000操作系统、VC6集成环境下调试通过。 
      

  2.   

    关键问题是怎么加上
    C:\DOS = "MSDOS 7.0"
    这段引导过程