Т.е. ReadFile прочла меньше, чем должна была? Значит произошла к-либо ошибка. А сама функция что вернула (true/false)? Проверь с GetLastError что за ошибка возникла.
nNumberOfBytesToRead совпадает с возвращаемым значением в lpNumberOfBytesRead.А вот sizeof от буфера куда оно прочиталось возвращяет погоду на Марсе И
GetLastError 0 возвращяет.