怎么计算磁盘扇区的哈希值并获取进度呢,已经做出来的检验后是错的

int getMD5_Disk()
{
OVERLAPPED over = { 0 };
over.Offset = 0;

char* data = new char[4 * 1024 * 1024 * 1024];
long int Data_Area = 4 * 1024 * 1024 * 1024;
unsigned char out[MD5_DIGEST_LENGTH];

HANDLE ihandle = CreateFile(TEXT("\\\\.\\C:"), GENERIC_READ | GENERIC_WRITE, FILE_SHARE_READ | FILE_SHARE_WRITE, NULL, OPEN_EXISTING, 0, NULL);
if (ihandle == INVALID_HANDLE_VALUE)
{
    cout << "句柄获取失败" << endl;
    CloseHandle(ihandle);
    return -1;
}

MD5_CTX ctx;
MD5_Init(&ctx);
DWORD readsize;
int i = 0;
while (ReadFile(ihandle, data, Data_Area, &readsize, &over) != 0)
{
    cout << i << " ";
    i++;
    MD5_Update(&ctx, (char*)data, readsize);
}
CloseHandle(ihandle);

MD5_Final(out, &ctx);
printHexStr(out, MD5_DIGEST_LENGTH);

delete[] data;

}