申明,本人不是不擅长编程,所以写文章难免会有错误,欢迎各位多多提意见,
昨天修改一个以前写的小程序,由于要处理超大的文件,所以准备修改一下读取的结构体的大小。

struct NTFS_MFT
{
   char  tag[4];
   .........
}

NTFS_MFT MFT_en;
DWORD dwRZ;

int cb = ReadFile(hFile,&MFT_en,size(NTFS_MFT),&dwRZ,0)

    ......


在读取NTFS_MFT这个结构体的时候,cb老是返回0值,正常情况下应该返回1. 以前一直使用这种方法来读取,没有报错,但这次找了很久,没找到原因,甚至将以前的代码以及结构体完整复制过来进行读取。仍然错误。
后来仔细区分,之前使用这种方式读取时,是读取的文件,而这里要读取的物理硬盘,需要512字节对齐,也就是说,每次需要读取512个字节。将结构体修改成原来的512字节,将ReadFile修改如下后读取成功。
int cb = ReadFile(hFile,&MFT_en,512,&dwRZ,0)

    ......
}