Bargest , вообще-то если используешь асинхронный режим (@OverlapRead), то ReadFile запросто может вернуть ошибку, но при этом GetLastError возвратит ERROR_IO_PENDING. тогда данные можно получить через WaitForSingleObject/GetOverlappedResult.
http://msdn.microsoft.com/en-us/libr...67(VS.85).aspx