您现在的位置: 中国教师站 >> 教师关注 >> 电脑技术 >> 编程技术 >> Visual C >> 正文

Google
不同WINDOWS平台下磁盘逻辑扇区的直接读写
作者:Siny 文章来源:中国教师站cn-teacher 点击数: 更新时间:2007-4-22 12:40:36
为0x80就可以读取逻辑硬盘C盘的扇区了呢?回答是否定的。INT13用来存取硬盘的功能在WINDOWS中被忽略了。另外,INT25、INT26虽然可以存取硬盘,但是它们不能工作在FAT32格式的硬盘上。下面的列表将详细列举与磁盘操作相关的中断调用的限制情况(不特殊说明,指的是在WIN95/98操作系统下):

     中断功能             限制及使用情况

      INT13             不可以读写硬盘,仅支持软盘
    INT25/INT26         不可以读/写FAT32硬盘,支持FAT12、FAT16
   INT21(440DH-41H/61H) 不可用(文档资料中说支持FAT12、FAT16、FAT32,实际上没有实现)
   INT21(7305H)         可以读写软盘、硬盘,支持FAT12、FAT16、FAT32,但要求WIN95OSR2及以后版本

    值得一提的是上表中的INT21--7305H功能是专门提供用来支持FAT32的,并且用来替换INT25/INT26,对应的控制命令字是6(即VWIN32_DIOC_DOS_DRIVEINFO),它和INT13、INT25、INT26等中断功能的一个显著区别是:它不使用寄存器来传递参数(INT21--440DH-41H/61H类同),而是使用一个称为DISKIO的结构,寄存器EBX用来保存指向该结构的地址。DISKIO的定义如下:
     typedef struct _DISKIO {
      DWORD  dwStartSector;   // 要读写的起始扇区号
      WORD   wSectors;        // 要读写的扇区数
      DWORD  dwBuffer;        // 用来保存读/写数据的缓冲区
     }DISKIO, * PDISKIO;

另外,在使用该功能时还需要特别设置一些寄存器,如ECX必须为-1,用ESI来表示读写。下面的例子是使用该功能来实现上面的例子功能,即读软盘A的一个扇区。首先定义一个新的寄存器结构供本例使用:
     typedef struct _DIOC_REGISTERS{
       DWORD EBX;
       DWORD EDX;
       DWORD ECX;
       DWORD EAX;
       DWORD EDI;
       DWORD ESI;
       DWORD Flags;
      }DIOC_REGISTERS;  

其实该结构和上面的INT13_REGISTERS是一样的,只不过INT13_REGISTERS将寄存器细分开了,可读性更强些。本例从步骤上说和上面的例子相同,只有寄存器设置一步在内容上有差异。
    第一步:打开VWIN32服务。
    第二步:设置寄存器。
     DIOC_REGISTERS reg = {0};
     DISKIO         dio;
     unsigned char Buffer[512];
     //设置参数结构
     dio.dwStartSector = 0;//注意:和上例不同,不是1,从0开始编号
     dio.wSectors      = 1;
     dio.dwBuffer      = (DWORD)Buffer;
      //设置寄存器
     reg.EAX = 0x7305;    //功能上类似于INT25,绝对读
     reg.EBX = (DWORD)&dio;//参数结构的地址
     reg.ECX = -1;//必须是-1     
     reg.EDX = 1;  //注意:和上例不同,驱动器编号变了,0--缺省 1--A、2--B、3--C 
     reg.ESI = 0;  //ESI的bit0表示读写,0--读、1--写

    在写状态时SI的bit1--bit12,bit15必须是0,bit13、bit14、bit15共同来表示所写数据的类型,具体见下表:
           15 14 13 类型描述
           0  0  0  其它或不知道. 
           0  0  1  FAT数据 
           0  1  0  目录数

上一页  [1] [2] [3] [4] 下一页

  • 上一篇文章:

  • 下一篇文章:
  • 相关专题:
     
     网友评论:(评论内容只代表网友观点,与本站立场无关!)
    GOOGLE广告

    阅读排行

    | 设为首页 | 加入收藏 | 联系站长 | 友情链接 | 版权申明 |
    中国教师站

    中国教师站 版权所有 Copyright © 2006-2020 All Rights Reserved 站长:Sina & Siny
    [备用域名:www.JXZYW.Com] 有事请留言有事请留言
    【实力成就精品 诚信呵护品牌】

    信息产业部备案
    苏ICP备06018635号