首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> VC >> VC++

Windows 2000 下直接讀寫磁碟扇區:CreateFile/ReadFile/WriteFile 實戰範例

     編輯:VC++

原作者出處:CodeGuru | 譯者:聞怡洋

核心原理

在 NT/2000 系統下,透過 CreateFile 開啟磁碟機(如 \\.\A:),再以 ReadFile/WriteFile 進行扇區級讀寫。

完整 C 程式碼:讀取軟碟機扇區

/* -----------------------------------------------------
   Read Floppy Disk Sector for Win NT/2000
   讀取 [numsec] 扇區,從 [head] [track] [sector] 開始
   -------------------------------------------------------*/

char* ReadSectors(int head, int sector, int track, int numsec) {
    // 計算邏輯扇區號(LBA)
    int LogicalSector = (sector - 1) +
                        (head * SECTORSPERTRACK) +
                        (track * SECTORSPERTRACK * NUMOFHEADS);

    char *buffer;
    HANDLE hDevice;
    DWORD bytesread;

    // 開啟裝置 A:
    hDevice = CreateFile("\\\\.\\A:",
                         GENERIC_READ,
                         FILE_SHARE_READ | FILE_SHARE_WRITE,
                         NULL, OPEN_EXISTING, 0, NULL);
    if (hDevice == NULL) {
        MessageBox("Failed!");
        return NULL;
    }

    // 移動檔案指標至目標扇區
    SetFilePointer(hDevice,
                   LogicalSector * 512,
                   NULL,
                   FILE_BEGIN);

    // 配置緩衝區並讀取
    buffer = (char*)malloc(512 * numsec);
    memset(buffer, ' ', 512 * numsec);

    if (!ReadFile(hDevice, buffer, 512 * numsec, &bytesread, NULL)) {
        // 錯誤處理可取用 GetLastError()
    }

    CloseHandle(hDevice);
    return buffer;
}

關鍵點提示

  • 裝置路徑格式:\\\\.\\A:(雙反斜線轉義)。
  • 扇區大小固定 512 bytes,SetFilePointer 以 byte 為單位定位。
  • 需系統管理員權限執行。
  • 寫入操作同理,改用 GENERIC_WRITE 與 WriteFile。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved