精华区 [关闭][返回]

当前位置:网易精华区>>讨论区精华>>电脑技术>>○ DOS>>实用资料>>to yangcs: 逻辑分区的开始柱面数大于1024怎么办?

主题:to yangcs: 逻辑分区的开始柱面数大于1024怎么办?
发信人: goodfrd(supervisor)
整理人: yangcs(2002-09-19 10:57:51), 站内信件
必须使用LBA方式。
你看我的硬盘分区表(DISKEDIT):
              Starting Location    Ending Location     Relative  Number of
System  Boot Side Cylinder Sector Side Cylinder Sector  Sectors    Sectors
 ?       No   1      0       1   254      1      63         63      32067
 ?       No   0      2       1   254    131      63      32130    2088450
FAT32    Yes  0    132       1   254    515      63    2120580    6168960
EXTEND   No   0    516       1   254   1022      63    8289540   21591360

我的硬盘是 14多个GB(29880900个扇区)
前面3个分区如第3个分区的大小是可以从前面6个数算出来的:
(515-132+1)*255*63=6168960
但第4个分区的大小是不可以从前面6个数算出来的:
(1022-516+1)*255*63=8144955
实际第4个分区的大小是21591360
21591360/255/63=1344
1344+516-1=1859
我的硬盘按CHS方式为1860道、255头、63扇规格

小于1024道的扇区用INT13H的AH=2/3功能读/写
大于1023道的扇区用INT13H的AH=42H/43H功能读/写

C 源程序见我的主页 HDTOOL.C (其中包括克隆硬盘的功能)
摘抄其中一段如下:
      memset(pkt_buf, 0x00, sizeof(pkt_buf));
      *(int *)pkt_buf = 0x0018;
      *(int *)(pkt_buf+0x02) = sec_num;
      *(USGI *)(pkt_buf+0x04) = FP_OFF(buf);
      *(USGI *)(pkt_buf+0x06) = FP_SEG(buf);
      *(USGL *)(pkt_buf+0x08) = sabn;
      inregs.h.dl = drv_no;
      inregs.x.si = FP_OFF(pkt_buf);
      segregs.ds = FP_SEG(pkt_buf);
      inregs.h.ah = rwv + 0x40; /* 42h -- read, 43h -- write, 44h -- verify */
      inregs.h.al = 0;
      int86x(0x13, &inregs, &outregs, &segregs);
      if(!outregs.x.cflag) break;



----
欢迎光临良友程序库:http://0d0a.126.com http://f12.my163.com,免费提供我的各种Source Code

兄弟我抛出几块砖,有玉的赶紧亮出来啊!
 

[关闭][返回]