WEB开发网
开发学院软件开发VC 简易软盘镜像工具的实现及操作系统编写初步 阅读

简易软盘镜像工具的实现及操作系统编写初步

 2007-03-15 21:54:13 来源:WEB开发网   
核心提示:本文示例源代码或素材下载 摘要本文给出了软盘镜像生成工具的实现,并用其把自己编译生成的引导文件制作成软盘镜像,写入软盘实现一个简单操作系统的引导,关键词 软盘镜像工具 操作系统引导,简易软盘镜像工具的实现及操作系统编写初步,为了深入的了解80X86计算机的内部原理,参照别人的程序用汇编写了几个小程序,图3 把镜

本文示例源代码或素材下载

摘要

本文给出了软盘镜像生成工具的实现,并用其把自己编译生成的引导文件制作成软盘镜像,写入软盘实现一个简单操作系统的引导。

关键词 软盘镜像工具 操作系统引导。

为了深入的了解80X86计算机的内部原理,参照别人的程序用汇编写了几个小程序。但生成软盘镜像的工具大都是DOS版本的,于是就想自己用VC也实现一个,并用把自己的引导程序写入软盘上验证一下。

1、镜像工具的基本原理

镜像工具读取磁盘上的文件,然后安装一定的格式生成软盘镜像文件,最后把软盘镜像文以512字节扇区为单位,写入软盘上。

2、镜像工具的界面设计及功能介绍

图1 主界面

2.1 【功能1】生成软盘镜像文件

(1)要生成镜像文件,需要先选择源文件,然后点击【生成…】,如MyDiskImg.img,点击【保存】生成镜像文件。

图2 生成镜像文件

(2)然后插入一张软盘,点击写软盘,选择刚生成的镜像文件。点击【打开】,系统便开始把选择的镜像文件写入软盘中。

图3 把镜像文件写入软盘

(3)重新启动计算机,选择从软盘启动,看操作是否成功。

3、具体代码编写

3.1 生成软盘镜像代码

基本原理为对列表中的源文件依次读取,然后写入到一个img文件中,具体的代码请参考(省略了部分不关键代码):

//生成镜像文件函数
UINT FuncGenImageFile(LPVOID pDialog)
{
  //Begin 显示设置
  省略…
  //1.创建输出镜像文件
  byte* pBuf = NULL;
  DWORD count = 0,dwFileLength=0;
  CFile outfile;//镜像文件
  if(!outfile.Open(pCurDlg->m_ImgFileName,CFile::modeCreate | CFile::modeWrite))
  {
    错误提示…
      return -1;
  }
  
  //2.依次对输入文件读取,写入输出镜像文件
  for( int i = 0 ; i < pList->GetCount(); ++i )
  {
    CString sInFileName;
    pList->GetText(i,sInFileName);
    CFile infile;
    
    if(!infile.Open(sInFileName,CFile::modeRead))
    {
      错误提示…
        return -1;
    }
    dwFileLength = infile.GetLength();
    if(i==0)
    {
      if(dwFileLength>512)
      {
        sOut.Format(_T("文件%S不是一个有效的引导区文件,请使用[功能3]裁减该文件!"),sInFileName);
        return -1;
      }
    }
    if(i==0)//对0扇区文件进行特殊处理
    {
      pBuf = new byte[BlOCKSIZE];
      ::memset(pBuf,0,BlOCKSIZE);
      infile.Read(pBuf,dwFileLength);
      if(pBuf[510]!=0x55) pBuf[510]=0x55;
      if(pBuf[511]!=0xAA) pBuf[510]=0xAA;
      outfile.Write(pBuf,BlOCKSIZE);
      dwFileLength = BlOCKSIZE;
    }
    else
    {
      pBuf = new byte[dwFileLength];
      infile.Read(pBuf,dwFileLength);
      outfile.Write(pBuf,dwFileLength);
    }
    infile.Close() ;
    
    delete[] pBuf;
    count += dwFileLength;
    pProgCtrl->SetPos((int)(count*100/FLOPYBYTESIZE));
    }
  
#ifdef ADISKMODE
  //3.补充剩余的软盘字节为0
  DWORD dwRet = FLOPYBYTESIZE-count;
  pBuf = new byte[dwRet];
  memset(pBuf,0,dwRet);
  outfile.Write(pBuf,dwRet);
  delete[] pBuf;
#endif
  outfile.Close() ;
  
  
  //end 显示设置
  省略…
    return 0;
}
3.2 写镜像文件到软盘代码

1 2 3  下一页

Tags:简易 软盘 镜像

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接