原作者出處:CodeGuru | 譯者:聞怡洋
在 NT/2000 系統下,透過 CreateFile 開啟磁碟機(如 \\.\A:),再以 ReadFile/WriteFile 進行扇區級讀寫。
/* -----------------------------------------------------
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:(雙反斜線轉義)。SetFilePointer 以 byte 為單位定位。GENERIC_WRITE 與 WriteFile。