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;
}