Windows filewrite терпит неудачу для сектора Тома больше чем 0x1fff
Почему я не могу написать сектор в позиции больше 0x1FFF? Я пытаюсь записать сектор на SD-карту. Следующий код отлично работает для секторов с номером меньше 0x2000, но терпит неудачу для любого сектора больше 0x1FFFF, возвращающего код ошибки № 5. Я не знаю, почему?
Что я уже пробовал:
#include <windows.h> #include <stdio.h> int main() { LPCWSTR device_name = L"\\\\.\\PHYSICALDRIVE2"; int sector = 0x2000; //Open the volume HANDLE hDisk = CreateFile(device_name, (GENERIC_READ | GENERIC_WRITE), 0, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL); if (hDisk != INVALID_HANDLE_VALUE) { DWORD ol = 0; //Lock the volume if (DeviceIoControl(hDisk, FSCTL_LOCK_VOLUME, NULL, 0, NULL, 0, &ol, NULL)) { ol = 0; //Dismount the volume if (DeviceIoControl(hDisk, FSCTL_DISMOUNT_VOLUME, NULL, 0, NULL, 0, &ol, NULL)) { unsigned char buff[512]; //Set position at desire sector int position = sector * 512; DWORD readBytes = 0; long moveToHigh = 0; SetFilePointer(hDisk, position, &moveToHigh, FILE_BEGIN); //Read the sector if (ReadFile(hDisk, buff, 512, &readBytes, NULL) && readBytes == 512) { //Set the write position DWORD writenBytes = 0; moveToHigh = 0; SetFilePointer(hDisk, position, &moveToHigh, FILE_BEGIN); if (WriteFile(hDisk, buff, 512, &writenBytes, NULL) && writenBytes == 512) { printf("OK for Sector %d \r\n", sector); } else { DWORD dwError = GetLastError(); printf("Error Code: %d \r\n", dwError); } } } } CloseHandle(hDisk); } }
Richard MacCutchan
Вы должны проверить возвращаемое значение от вызова до SetFilePointer
посмотреть, удастся ли это.