当前位置:技术中心首页 >> 编程相关 >> 关于INT13H EXT操作的 C 源程序
关于INT13H EXT操作的 C 源程序
2008-02-10 13:09:48  作者:  来源:互联网  浏览次数:9  文字大小:【】【】【
  •   关于INT13H EXT的数据结构及操作见:http://zli.webspace4free.biz/page5.html /** * 硬盘操作:"读"操作(0x42),"写"操作(0x43),\n * "cmd" must be Diskread(0x42) or Diskwrite(0x43). * @retu ...

关于INT13H EXT的数据结构及操作见:
http://zli.webspace4free.biz/page5.html

 

/**
 * 硬盘操作:"读"操作(0x42),"写"操作(0x43),\n 
 * "cmd" must be Diskread(0x42) or Diskwrite(0x43).
 * @return >=0: 成功,读写的数据块数;
 * @return -1: 失败.
 */
short _diskop (unsigned char drv, unsigned char cmd,
     unsigned char * buffer, unsigned long startlow, unsigned short copyblks)
{
 /* 磁盘存取数据包结构 */
 struct disk_address_packet {
  unsigned char size_of_packet;
  unsigned char reserved;
  unsigned short number_of_blocks_to_transfer;
  unsigned short transfer_buffer_offset;
  unsigned short transfer_buffer_segment;
  unsigned long starting_absolute_block_low;
  unsigned long starting_absolute_block_high;
 };
 struct disk_address_packet dap;
 unsigned char av;

 

 unsigned char * pt = (unsigned char *) &dap;

 dap.size_of_packet = sizeof (dap);
 dap.reserved = 0;
 dap.number_of_blocks_to_transfer = copyblks;
 dap.transfer_buffer_offset = FP_OFF(buffer);
 dap.transfer_buffer_segment = FP_SEG(buffer);
 dap.starting_absolute_block_low = startlow;
 dap.starting_absolute_block_high = 0; /* 忽略高位 */

 asm {
  push ds
  push si
  mov ah, cmd
  mov dl, drv
  lds  si, DWORD PTR pt
  int  13h
  pop si
  pop ds
  mov av, ah
  jc  error
 }
 return (dap.number_of_blocks_to_transfer);

error:
 ErrorNum = av;
 return (-1);

}

0

顶一下

0

踩一下
相关文章
内页链接 | 友情链接 | 诚聘英才 | 关于我们 | 版权声明 | 联系我们 | 网站公告 | 广告服务
回天数据恢复中心 版权所有
浙江总部:杭州市文三路388号钱江科技大厦10楼1016室 (学院路和文三路交汇路口颐高数码广场),东方通信大厦旁边.
地址 :上海市埔东新区张扬路628弄东明广场2号楼23楼C室(太平洋三期电脑城正对面,百脑会电脑城左侧)
全国服务热线 :400-889-1122(全国),0571-85121630(杭州),021-28877655(上海) 传真 :0571-56771013