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

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

 2007-03-15 21:54:13 来源:WEB开发网   
核心提示: 基本原理是读取生成的镜像文件,然后把其写入软盘启动器A中, 具体的代码请参考(省略了部分不关键代码)://写镜像文件到软驱UINT FuncWriteFlopy(LPVOID pDialog){//begin显示设置省略…int nTotalBlocks = 80*18*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.Read(pBuffer, BlOCKSIZE);
    WriteFile(hFile, pBuffer, BlOCKSIZE, &dwLen, NULL);
    
#ifndef ADISKMODE
    if((DWORD)((i+1)*BlOCKSIZE)>=dwImgLen) break;//镜像文件写入完毕
#endif
    if(dwLen!=BlOCKSIZE)
    {
      sOut.Format(_T("写入镜像文件%s失败,请检查软驱!"),pCurDlg->m_ImgFileName);
      //…
      return -1;
      
    }
    pProgCtrl->SetPos((int)(i*100/nTotalBlocks));
  }
  
  //4.关闭文件
  fInFile.Close();
  CloseHandle(hFile);
  free(pBuffer);
  
  
  //end 显示设置
  pProgCtrl->SetPos(100);
  sOut.Format(_T("镜像文件%s写入软驱成功!"),pCurDlg->m_ImgFileName);
  //…
  return 0;
}
4、操作系统编写

Tags:简易 软盘 镜像

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