为什么我不能在大于0x1FFF的位置写入扇区? 我正在尝试在SD卡中写入扇区。以下代码适用于扇区号小于0x2000的扇区,但不适用于大于0x1FFFF的扇区,返回错误码5。我不知道为什么? 我不认为这是一个重复的问题,因为我可以在磁盘中写入扇区,但不能写入大于0x1FFF的扇区。我正在使用WinHex和磁盘编辑器来验证那些扇区是否存在。
#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),NULL,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,NULL);
if (hDisk != INVALID_HANDLE_VALUE)
{
DWORD ol = 0;
//Lock the volume
if (DeviceIoControl(hDisk,FSCTL_LOCK_VOLUME,&ol,NULL))
{
ol = 0;
//Dismount the volume
if (DeviceIoControl(hDisk,FSCTL_DISMOUNT_VOLUME,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,FILE_BEGIN);
if (WriteFile(hDisk,&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);
}
}