Windows FileWrite对于大于0x1FFF的卷扇区失败

为什么我不能在大于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);
    }   
}
mysetry 回答:Windows FileWrite对于大于0x1FFF的卷扇区失败

暂时没有好的解决方案,如果你有好的解决方案,请发邮件至:iooj@foxmail.com
本文链接:https://www.f2er.com/3149621.html

大家都在问