当前位置:  技术问答>linux和unix

用程序实现格式化磁盘怎么实现?

    来源: 互联网  发布时间:2014-11-24

    本文导语:  如何编程实现对软盘的格式化?听说在用中断13H时,需要向磁头写一个数据表才能实现格式化。如果有人知道,请把详细方法告诉我,谢谢! | /*---------------------+    |     FAT 12 or 16     |    +--...

如何编程实现对软盘的格式化?听说在用中断13H时,需要向磁头写一个数据表才能实现格式化。如果有人知道,请把详细方法告诉我,谢谢!

|
/*---------------------+
   |     FAT 12 or 16     |
   +---------------------*/
   else
   {
      bpb->Comm.nBootSect  = 1;                          /** FAT 玡合跋计 **/
      bpb->FAT1x.nFdbRoot  = 512;                            /** ヘ魁兜计 **/
      bpb->FAT1x.firstHD   = 0x80;                       /** 材场祑盒腹 **/
      bpb->FAT1x.signature = 0x29;                               /** 疭紉絏 **/
      bpb->FAT1x.serNoLow  = random(0xffff) + 1;
      bpb->FAT1x.serNoHigh = random(0xffff) + 1;
      cpymem(bpb->FAT1x.label, "NO NAME    ", 11);                /** Label **/
      cpymem(bpb->FAT1x.fsType, "FAT16   ", 8);                /** 郎╰参 **/
      if ( ptr->old_id == 1 )
      {
         bpb->FAT1x.fsType[4] = '2';
         bpb->Comm.sectPerClust = 8;                              /** FAT12 **/
      }
      else
      {
         /*----------------------------------+
         |       – Cluster 合跋计       |
         +----------------------------------*/
         bpb->Comm.sectPerClust = ( Size FAT1x.bootStrap;              /** 币笆祘Α絏熬簿竚 **/
   } /* end if */

   codePTR = (byte FAR *)BOOT_HEAD;
   while ( codePTR != (byte FAR *)BOOT_END )             /** 恶币笆祘Α絏 **/
      *bootStrap++ = *codePTR++;

   /*--------------------------------------+
   |  Modify SI context at BootSect.asm    |
   |  and fill JUMP instruction to buffer  |
   +--------------------------------------*/
   bpb->Comm.NOP = 0x90;                                       /** NOP  **/
   bpb->Comm.jumpCode = 0xeb;
   if ( ptr->old_id == 0xb || ptr->old_id == 0xc )
   {                                        /** JMP  58h 单 BPB  **/
      bpb->Comm.jumpOffset = 512 - sizeof(bpb->FAT32.bootStrap) - 4;
      bpb->FAT32.bootStrap[ (word)BOOT_DATA - (word)BOOT_HEAD + 1 ] += 0x5a;
   }
   else
   {                                        /** JMP  3Ch 单 BPB  **/
      bpb->Comm.jumpOffset = 512 - sizeof(bpb->FAT1x.bootStrap) - 4;
      bpb->FAT1x.bootStrap[ (word)BOOT_DATA - (word)BOOT_HEAD + 1 ] += 0x3e;
   }
} /* end CreateBPB */

     
/*============================= 秈 ︽  Α て ==============================*/
sword Format (PARTN *ptr, void *bootSect)
{
   dword   Sys_Sector, NowSect, Start, Total;
   byte    Temp[512];
   FS_SECT *fsSect;
   byte    isFAT32;
   DOSBPB  *bpb;
   sword   ratio, i;
                                
   bpb     = (DOSBPB *)bootSect;
   isFAT32 = ( (ptr->old_id == 0xb) || (ptr->old_id == 0xc) );

   NowSect = GetStart(ptr);                                /** 眔币﹍合跋 **/
   Total   = get_nsector(ptr);                             /** だ澄合跋羆计 **/

   if ( isFAT32 )                              /** 璸衡郎╰参ノぶ合跋 **/
      Sys_Sector = bpb->FAT32.sectPerFAT * bpb->Comm.nFAT +
                   bpb->Comm.nBootSect + bpb->Comm.sectPerClust;
   else
      Sys_Sector = bpb->FAT1x.sectPerFAT * bpb->Comm.nFAT +
                   bpb->Comm.nBootSect + (bpb->FAT1x.nFdbRoot >> 4);

   #if ( DISPLAY == CHINESE )
      show_msg("タ  秈 ︽  Α て  Ч Θ  ");
   #else 
      show_msg("It's formatting, completed  ");
   #endif

   /*-----------------------------*/
   /*      ╰ 参 合 跋 恶       */
   /*-----------------------------*/
   for ( Start = 0 ; Start title          = 0x41615252L;
      fsSect->signature      = 0x61417272L;
      fsSect->next_free_clus = 0x00000002L;
      fsSect->magicNum       = 0xaa55;

      /*----------------------------------------------------+
      |            FAT32 郎  ╰ 参 合 跋 戈 癟            |
      +----------------------------------------------------*/
      fsSect->free_clust_cnt  = (Total - Sys_Sector) /
                                (dword)bpb->Comm.sectPerClust;

      if ( lba_WriteWDK(NowSect + 1, 1, fsSect) ||
           lba_WriteWDK(NowSect + bpb->FAT32.bakBootSect + 1, 1, fsSect) )
      {
          return( -1 );
      }

      memset(Temp, 0, 512);                   /** ミ FAT ㄏノぇ既丁 **/
      *(dword *)&Temp[4] = 0x0fffffffL;
      *(dword *)&Temp[8] = 0x0fffffffL;
      Temp[3]  = 0x0f;                                  /** 砞﹚ FAT 繷 **/
   }
   else
   {
      if ( ptr->old_id != 1 )                          /** 砞﹚ FAT 繷 **/
         Temp[3] = 0xff;
   }
                      
   *(word *)&Temp[1] = 0xffff;                          /** 砞﹚ FAT 繷 **/
   Temp[0] = bpb->Comm.m_descriptor;                       /** 砞称磞瓃じ **/

   /*-----------------------------+
   |       ミ ㄢ  FAT       |
   +-----------------------------*/
   NowSect += bpb->Comm.nBootSect;
   for ( i = 0 ; i Comm.nFAT ; i++ )
   {
      if ( lba_WriteWDK(NowSect, 1, Temp) )
         return( -1 );

      /*-------------- 璸 衡 材   FAT  ぇ 熬 簿 秖 ---------------*/
      NowSect += ((isFAT32) ? bpb->FAT32.sectPerFAT : bpb->FAT1x.sectPerFAT);
   }

   return( 0 );
} /* end Format */


    
 
 

您可能感兴趣的文章:

  • 问下arm下如何实现memory模式的cf的驱动,程序框架怎么搭!有源程序参考下更好!分数不多全部送上,谢谢了! iis7站长之家
  • 编一个模拟shell实现的程序,怎么实现输入输出重定向?谢谢
  • linux下通过crond实现自动执行程序
  • 如何用shell程序实现一个监控程序(内详)
  • HASH查找的程序实现及性能分析
  • applet程序不能实现与application程序之间的通信,怎么办呢?
  • 使用libpcap实现抓包程序的步骤及代码示例
  • 请问能否在linux实现一个应用程序访问另外一个程序的内存数据?
  • c语言基于libpcap实现一个抓包程序过程
  • 实现同样的功能,内核程序和用户程序差别效率上差别大么?
  • 用户程序的ioctl是怎么和驱动程序中的ioctl实现联系
  • 关于linux c程序实现自动实现telnet的问题
  • 问下arm下如何实现memory模式的cf的驱动,程序框架怎么搭!有源程序参考下更好!分数不多全部送上,谢谢了!
  • 在linux实现在任意给定的目录查找文需要的件的程序? 下面的实现思路可不可以呢????
  • linux下,如何在程序中分区(代码实现)
  • 请问Jb怎么实现系统登录程序!
  • 求救呀:我用QT编了一个界面程序,怎么实现静态编译好让那个程序也能在没有装QT的系统上运行呀!!!
  • expect实现telnet远程主机后,运行程序问题
  • 客户端程序和服务器程序间能否通过管道来实现数据的双向传递啊?
  • 请问两个毫不相关的程序,怎样实现通信
  • 如何用bash实现这个程序?
  • 在 uclinux 上面 进行编程,程序如何对硬盘进行格式化和分区?
  • 跪求:请问如何在程序中写代码调用函数对硬盘进行分区和格式化
  • 对于自己写的文件系统,自己写格式化程序时除了写入dbr,还要向系统写入什么信息.
  • 請問,GUI程序當中.1設置組件的焦點要怎樣,2如何進行對字串進行格式化(100分)
  •  
    本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
    本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • !!Unix下如何在程序中查询出剩余磁盘空间?应该使用什么函数?
  • LINUX磁盘驱动程序
  • 请问如何在C程序中获取linux系统的磁盘剩余空间
  • PDA磁盘加密程序 FreeOTFE4PDA
  • 急,磁盘错误,程序运行很慢!
  • 想写个磁盘空间检测的程序,不知道是perl 还是 shell?
  • 请问,在unix中用C/C++写的监控程序有没有可以获得磁盘空间的函数?
  • 运行asp.net程序 报错:磁盘空间不足
  • C++非递归遍历磁盘文件和递归遍历磁盘文件的程序示例
  • 重装服务器后IIS网站错误(应用程序中的服务器错误)
  • 为什么我在java程序里启动的一个程序在java程序关闭后,该程序的所有进程都关掉了
  • windows server2008上PowerBuilder程序系统错误解决方法
  • Linux 编程怎么样在程序开启一个程序,和关闭一个程序?
  • 程序员的八种级别,你属于哪一级?
  • 请问从一个java程序中如何调用另一java程序,并控制可以其状态(最小化、最大化、结束程序),还有怎样知道那个被调用的程序结束。
  • Linux下指定运行时加载动态库路径及shell下执行程序默认路径
  • Linux下的程序是在内存中运行的吗?为什么在程序运行的时候可以删除程序文件?
  • 在docker容器中通过apt-get安装新的程序
  • 我的程序是用c写的gtk+程序,有个函数的参数要传给它图片的文件名,但是图片和原程序不在同一目录下怎么办?怎么在程序里指定文件的路径
  • http协议介绍,文件上传分析及程序举例
  • 为什么linux下的C++程序这么少见? 请问那里有linux下的C++程序?什么类型的程序都可以.
  • 程序员赚钱致富的6种方法
  • 我写了个linux下的网络程序,程序在多个电脑间通信,但是我没有多个电脑,怎么调试这样的程序啊?
  • 程序员为了健康必看!早晨空腹喝水,是对还是错?
  • 在java控制台程序中,可以用System.exit(0);使用一个程序终止,那么在servlet中如何使一个servlet程序终止呢?
  • 如何使用linux下gdb来调试python程序
  • 程序调用脚本,脚本启动另一个程序,如何让原始程序彻底释放资源?
  • 42岁程序员,今天我失业了,怎么办?
  • python计算程序开始到程序结束的运行时间和程序运行的CPU时间
  • c/c++服务器程序内存泄露问题分析及解决
  • linux下,一个程序如何向另一个程序发送消息,另一个程序如何接收


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3