Try using ReadFileEx instead.
Originally Posted by MSDN
The ReadFileEx function reads data from a file asynchronously. It is designed solely for asynchronous operation, unlike the ReadFile function, which is designed for both synchronous and asynchronous operation. ReadFileEx lets an application perform other processing during a file read operation.
Its for asynchronous transfer and so it would return for other processing in the middle of the read operation which is reading from corrupt source.