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

莫爱莫情

莫爱莫情

2016-01-29 12:11

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

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

作者:liu_sir

下载源代码


摘要

(本文来源于图老师网站,更多请访问http://m.tulaoshi.com/cyuyanjiaocheng/)

  本文给出了软盘镜像生成工具的实现,并用其把自己编译生成的引导文件制作成软盘镜像,写入软盘实现一个简单操作系统的引导。
关键词 软盘镜像工具 操作系统引导。
  为了深入的了解80X86计算机的内部原理,参照别人的程序用汇编写了几个小程序。但生成软盘镜像的工具大都是DOS版本的,于是就想自己用VC也实现一个,并用把自己的引导程序写入软盘上验证一下。

(本文来源于图老师网站,更多请访问http://m.tulaoshi.com/cyuyanjiaocheng/)

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.补充剩余的软盘字节为0DWORD 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 写镜像文件到软盘代码
基本原理是读取生成的镜像文件,然后把其写入软盘启动器A中, 具体的代码请参考(省略了部分不关键代码):
//写镜像文件到软驱
UINT FuncWriteFlopy(LPVOID pDialog){//begin显示设置省略…int nTotalBlocks = 80*18*2;//1.打开A驱动器HANDLE    hFile = CreateFile(_T("\\.\A:"),GENERIC_WRITE,FILE_SHARE_WRITE,NULL,OPEN_EXISTING,0,NULL);if(hFile==NULL){sOut = _T("不能打开驱动器A");//…return -1;}PBYTE pBuffer = (PBYTE)malloc(BlOCKSIZE);if(pBuffer==NULL){sOut = _T("开辟内存空间失败!");//…return -1;}memset(pBuffer,0,BlOCKSIZE);//2.打开镜像文件CFile fInFile;BOOL b = fInFile.Open(pCurDlg->m_ImgFileName, CFile::modeRead);if(!b){sOut.Format(_T("不能打开镜像文件%s!"),pCurDlg->m_ImgFileName);…return -1;}//3.分块写入镜像文件DWORD dwImgLen = fInFile.GetLength();for(int i=0;i<nTotalBlocks;i++){DWORD dwLen=0;fInFile.      
展开更多 50%)
分享

猜你喜欢

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

C语言教程 C语言函数
简易软盘镜像工具的实现及操作系统编写初步

基于Linux操作系统实现的传真系统

Linux Linux命令 Linux安装 Linux编程 Linux桌面 Linux软件 Linux内核 Linux管理
基于Linux操作系统实现的传真系统

s8lol主宰符文怎么配

英雄联盟 网络游戏
s8lol主宰符文怎么配

Linux与Unix二大操作系统编程的安全

Linux Linux命令 Linux安装 Linux编程 Linux桌面 Linux软件 Linux内核 Linux管理
Linux与Unix二大操作系统编程的安全

Win XP操作系统镜像制作技巧大放送

windows 操作系统
Win XP操作系统镜像制作技巧大放送

lol偷钱流符文搭配推荐

英雄联盟 网络游戏
lol偷钱流符文搭配推荐

如何实现Linux操作系统的自动登录

Linux Linux命令 Linux安装 Linux编程 Linux桌面 Linux软件 Linux内核 Linux管理
如何实现Linux操作系统的自动登录

Windows XP操作系统镜像文件减肥实战

windows 操作系统
Windows XP操作系统镜像文件减肥实战

lolAD刺客新符文搭配推荐

英雄联盟
lolAD刺客新符文搭配推荐

让JSP页面过期, 保证每次JSP页面都是最新的.

让JSP页面过期, 保证每次JSP页面都是最新的.

编写线程安全的JSP程序

编写线程安全的JSP程序
下拉加载更多内容 ↓