I rewrote it like this:
bool retval = false;
// Windows native code
// Reference: http://msdn2.microsoft.com/en-us/library/aa363788.aspx
HANDLE hfile1 = CreateFile (file1.c_str (), 0, FILE_SHARE_READ, 0,
OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, 0);
if (hfile1 != INVALID_HANDLE_VALUE)
{
HANDLE hfile2 = CreateFile (file2.c_str (), 0, FILE_SHARE_READ, 0,
OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, 0);
if (hfile2 != INVALID_HANDLE_VALUE)
{
BY_HANDLE_FILE_INFORMATION hfi1;
BY_HANDLE_FILE_INFORMATION hfi2;
if (GetFileInformationByHandle (hfile1, &hfi1)
&& GetFileInformationByHandle (hfile2, &hfi2))
retval = (hfi1.dwVolumeSerialNumber == hfi2.dwVolumeSerialNumber
&& hfi1.nFileIndexHigh == hfi2.nFileIndexHigh
&& hfi1.nFileIndexLow == hfi2.nFileIndexLow);
CloseHandle (hfile2);
}
CloseHandle (hfile1);
}
return retval;
Is that OK?