CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
不看会后悔的Windows XP之经验谈 简单快捷DIY实用家庭影院
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  C++ Builder >  基础类

请问用C++ Builder如何读写软盘磁道扇区数据,不胜感激!

楼主lg12net(相信自己)2001-05-15 14:13:00 在 C++ Builder / 基础类 提问

请问用C++   Builder如何读写软盘磁道扇区数据,不胜感激! 问题点数:5、回复次数:3Top

1 楼BCB(天下三分明月夜,二分无赖是扬州)回复于 2001-05-15 14:32:00 得分 0

用BIOS能读,要进入ring0了  
  Top

2 楼yuyulily(打工仔)回复于 2001-05-15 15:11:00 得分 5

给你一篇文章:  
  以前的DOS版要读、写、格式化第0轨的第1个磁区,程式大致如下:    
  char   buffer[512];    
   
  reg.x.dx=0   ;       /*   for   drive   A   *    
  reg.x.cx=0x0001     /*   for   boot   sector   */    
  reg.x.bx=FP_OFF(buffer);    
  sreg.es=FP_SEG(buffer);    
  resg.x.ax=0x0201;       /*     02   for   Read,   03   for   Write   ,05   for   Format   */    
  int86x(0x13,&reg,&reg,&sreg);    
   
          那麽在windows   下转换为呼叫   DeviceIoControl   以便格式化、读取、写入该磁轨,DIOC_REGISTERS   这struct   在套上   DOS   下   Int21对HDD或FDD   的各项参数如要格式化是Int21也是有,   但Windows下也另有提供。    
   
  l#pragma   pack(push,   1)    
  struct   DIOC_REGISTERS   {    
          DWORD   reg_EBX;    
          DWORD   reg_EDX;    
          DWORD   reg_ECX;    
          DWORD   reg_EAX;    
          DWORD   reg_EDI;    
          DWORD   reg_ESI;    
          DWORD   reg_Flags;    
  };    
  #pragma   pack(pop)    
   
    sDiskImageInfo->hDevice   =   ::CreateFile("\\\\.\\vwin32",   0,   0,   NULL,   0,    
  FILE_FLAG_DELETE_ON_CLOSE,   NULL);    
    if(   sDiskImageInfo->hDevice   ==   INVALID_HANDLE_VALUE)    
      bRunNext   =   false;    
   
  //   Reset   Floppy   Disk    
      reg.reg_EBX   =   0;    
      reg.reg_EAX   =   0x0000;               //   IOCTL   for   block   devices    
      reg.reg_EDX   =   sDiskImageInfo->Driver;    
      reg.reg_EDI   =   0;   reg.reg_ESI=   0;    
      reg.reg_Flags   =   0x0001;           //   assume   error   (carry   flag   is   set)    
      dwResult   =   ::DeviceIoControl(   sDiskImageInfo->hDevice,    
  VWIN32_DIOC_DOS_INT13,    
                                                                  &reg,   sizeof(DIOC_REGISTERS),   &reg,    
  sizeof(DIOC_REGISTERS),   &cb,   0);    
   
  //   Seek   Floppy    
              reg.reg_EBX   =   0;    
              reg.reg_EAX   =   0x0C00;               //   IOCTL   for   block   devices    
              reg.reg_ECX   =   (   sDiskImageInfo->nC   <<   8)   |   sDiskImageInfo->nS;    
              reg.reg_EDX   =   (   sDiskImageInfo->nH   <<   8)   |   sDiskImageInfo->Driver;    
              reg.reg_EDI   =   0;    
  reg.reg_ESI=   0;    
              reg.reg_Flags   =   0x0001;           //   assume   error   (carry   flag   is   set)    
              dwResult   =   ::DeviceIoControl(   sDiskImageInfo->hDevice,    
  VWIN32_DIOC_DOS_INT13,    
                                                                        &reg,   sizeof(DIOC_REGISTERS),   &reg,    
  sizeof(DIOC_REGISTERS),   &cb,   0);    
   
  //   Read   Floppy    
  R_CreateDiskImageFile:    
              reg.reg_EBX   =   0;    
              reg.reg_EAX   =   0x0200   |   0x01;               //   IOCTL   for   block   devices    
              reg.reg_ECX   =   (   sDiskImageInfo->nC   <<   8)   |   sDiskImageInfo->nS;    
              reg.reg_EDX   =   (   sDiskImageInfo->nH   <<   8)   |   sDiskImageInfo->Driver;    
              reg.reg_EBX   =   (DWORD)   &m_Buf;    
              reg.reg_EDI   =   0;    
    reg.reg_ESI=   0;    
              reg.reg_Flags   =   0x0001;           //   assume   error   (carry   flag   is   set)    
              dwResult   =   ::DeviceIoControl(   hDevice,   VWIN32_DIOC_DOS_INT13,    
                                                                        &reg,   sizeof(DIOC_REGISTERS),   &reg,    
  sizeof(DIOC_REGISTERS),   &cb,   0);    
              if   (!dwResult   ||   (reg.reg_Flags   &   0x0001))    
              {    
  }    
  Top

3 楼lg12net(相信自己)回复于 2001-05-16 13:14:00 得分 0

多谢yuyulily的回复!  
  请问代码中的sDiskImageInfo对象的定义是什么?Top

相关问题

  • 如何将数据写入0磁道0磁头0扇区?(Dos下)
  • 请问磁盘每磁道的扇区数是不是一样的?
  • 菜鸟问题13:关于软盘磁道,是一个磁道占的字节多还是一个扇区占的多?
  • 我的硬盘出现了坏的扇区(C盘),怎么办?
  • 请各位大侠和斑竹解释一下硬盘的mbr(主引导区)和0扇区0磁道有什么区别?
  • 操作系统启动的时候,是从哪个哪个头的哪个磁道的那个扇区开始读的。
  • C++Builder
  • C++? VC++? C++ Builder?
  • 如何c语言编程访问大硬盘的物理扇区! 谢谢!
  • 在TURBO C 中,有什么函数是可以读写硬盘扇区的?

关键词

  • c++ builder
  • win32
  • 格式化
  • reg
  • dioc
  • sdiskimageinfo
  • vwin32
  • hdevice
  • 请问
  • dwresult

得分解答快速导航

  • 帖主:lg12net
  • yuyulily

相关链接

  • CSDN Blog
  • 技术文档
  • 代码下载
  • 第二书店
  • 读书频道

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
北京创新乐知广告有限公司 版权所有, 京 ICP 证 070598 号
世纪乐知(北京)网络技术有限公司 提供技术支持
Copyright © 2000-2008, CSDN.NET, All Rights Reserved
GongshangLogo