If part of the file is locked by another process and the read operation overlaps the locked portion, this function fails.
Accessing the input buffer while a read operation is using the buffer can cause corruption of the data read into that buffer. Applications must not read from, write to, reallocate, or free the input buffer that a read operation is using until the read operation completes.
When reading from a communications device, the behavior of this function is governed by the current communication time-outs as set and retrieved using the SetCommTimeouts and the GetCommTimeouts functions. Unpredictable results can occur if you fail to set the time-out values. For more information on communication time-outs, see COMMTIMEOUTS.
This function can fail and return ERROR_INVALID_USER_BUFFER or ERROR_NOT_ENOUGH_MEMORY when there are too many outstanding asynchronous I/O requests.
When a read operation reaches the end of a file, this function returns TRUE and sets *lpNumberOfBytesRead to zero. Windows Embedded CE does not support asynchronous read operations on files. The following code sample shows a test for the end of the file:
// Attempt a synchronous read operation.
bResult = ReadFile(hFile, &inBuffer, nBytesToRead, &nBytesRead, NULL) ;
// Check for end of file.
if (bResult && (nBytesRead == 0) )
{
// you are at the end of the file.
}