線上訂房服務-台灣趴趴狗聯合訂房中心
發文 回覆 瀏覽次數:1425
推到 Plurk!
推到 Facebook!

[Turbo C++]如何偵測到軟碟機的防寫保護?

尚未結案
ranboco
一般會員


發表:6
回覆:3
積分:1
註冊:2004-06-11

發送簡訊給我
#1 引用回覆 回覆 發表時間:2004-06-20 13:47:17 IP:61.229.xxx.xxx 未訂閱
我寫一個偵測軟碟機的程式 使用"_bios_disk"這個函式 按照說明,當軟碟防寫保護的時候,應該會有回傳值(高位元!=0) 但是經過實際測試,軟碟機防寫保護的時候,回傳時還是=0 程式還是當成是放入一片可讀寫的磁片,造成後面的程式寫入檔案發生錯誤 以下是我所撰寫的"偵測軟碟機"(B:槽) 請各位前輩指導,如何才能有效偵測出軟碟防寫保護    #include  int main(void) { struct diskinfo_t dinfo; int R; static char dbuf[512]; //=================================================== // Use C //=================================================== dinfo.drive = 1; /* drive number for B: */ dinfo.head = 0; /* disk head number */ dinfo.track = 0; /* track number */ dinfo.sector = 1; /* sector number */ dinfo.nsectors = 1; /* sector count */ dinfo.buffer = dbuf; /* data buffer */ clrscr(); printf("====USE C ===========================\n"); printf("Attempting to read from drive B:\n"); R = _bios_disk(_DISK_READ, &dinfo); if ((R&0xff00) == 0) { printf("Disk read from B: successful.\n"); printf("First three bytes read are 0xx 0xx 0xx\n", dbuf[0] & 0xff, dbuf[1] & 0xff, dbuf[2] & 0xff); } else printf("Cannot read drive B, status = 0xx\n", R); printf(" FDD test over....................... \n"); while(!kbhit()); return 0; }
dllee
站務副站長


發表:321
回覆:2519
積分:1711
註冊:2002-04-15

發送簡訊給我
#2 引用回覆 回覆 發表時間:2004-06-22 10:34:56 IP:203.204.xxx.xxx 未訂閱
引言:
#include     int main(void)
{
  struct diskinfo_t dinfo;
  int R;
  static char dbuf[512];    //===================================================
// Use C   
//===================================================
  dinfo.drive = 1; /* drive number for B: */
  dinfo.head = 0; /* disk head number */
  dinfo.track = 0; /* track number */
  dinfo.sector = 1; /* sector number */
  dinfo.nsectors = 1; /* sector count */
  dinfo.buffer = dbuf; /* data buffer */      clrscr();      printf("====USE C   ===========================\n");
  printf("Attempting to read from drive B:\n");
  R = _bios_disk(_DISK_READ, &dinfo);      if ((R&0xff00) == 0)
  {
    printf("Disk read from B: successful.\n");
    printf("First three bytes read are 0xx 0xx 0xx\n",
     dbuf[0] & 0xff, dbuf[1] & 0xff, dbuf[2] & 0xff);
  }
  else
    printf("Cannot read drive B, status = 0xx\n", R);      printf(" FDD test over....................... \n");      while(!kbhit());
  return 0;
}
個人建議,請使用最直接的方法,您可以先讀取一個磁區, 接著把那個磁區寫回去,如果可以寫入成功,那就是沒有防寫, 如果寫入不成功,就視為防寫。 因為讀寫的資料相同,所以不影響原來磁片的任何檔案。 以我查看 TC3.0 的線上說明,_bios_disk 的回傳值 0x03 Attempt to write to write-protected disk 所以,當寫回磁區時,如果回傳值是 0x03 就表示磁片防寫。 如果您只有讀,應該無法判斷是否防寫,因為那個防寫的狀態並不會存在磁片中,只能在您寫入時才知道。 http://www.ViewMove.com 視動自動化科技股份有限公司 ViewMove Technologies, Inc. 發表人 - dllee 於 2004/06/22 10:37:03
------
http://www.ViewMove.com
ranboco
一般會員


發表:6
回覆:3
積分:1
註冊:2004-06-11

發送簡訊給我
#3 引用回覆 回覆 發表時間:2004-06-28 09:59:52 IP:210.243.xxx.xxx 未訂閱
引言:個人建議,請使用最直接的方法,您可以先讀取一個磁區, 接著把那個磁區寫回去,如果可以寫入成功,那就是沒有防寫, 如果寫入不成功,就視為防寫。 因為讀寫的資料相同,所以不影響原來磁片的任何檔案。 以我查看 TC3.0 的線上說明,_bios_disk 的回傳值 0x03 Attempt to write to write-protected disk 所以,當寫回磁區時,如果回傳值是 0x03 就表示磁片防寫。 如果您只有讀,應該無法判斷是否防寫,因為那個防寫的狀態並不會存在磁片中,只能在您寫入時才知道。
太感謝了 難怪我一直無法有效偵測軟碟保護 一點就點到我的盲點 請接受小弟一拜~~~~(鞠躬)
系統時間:2024-05-03 3:33:21
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!