Index: src/libchcore/TOverlappedDataBuffer.cpp
===================================================================
diff -u -N -r11b0a299be97bc3afaa633d6522c17b214ba3b79 -r3c343f2e7aa0d489706136e78f2f56cdd5d417a9
--- src/libchcore/TOverlappedDataBuffer.cpp	(.../TOverlappedDataBuffer.cpp)	(revision 11b0a299be97bc3afaa633d6522c17b214ba3b79)
+++ src/libchcore/TOverlappedDataBuffer.cpp	(.../TOverlappedDataBuffer.cpp)	(revision 3c343f2e7aa0d489706136e78f2f56cdd5d417a9)
@@ -27,24 +27,38 @@
 #include "ErrorCodes.h"
 #include "IOverlappedDataBufferQueue.h"
 #include "RoundingFunctions.h"
+#include <atltrace.h>
 
+#define STATUS_END_OF_FILE 0xc0000011
+
 BEGIN_CHCORE_NAMESPACE
 
 ///////////////////////////////////////////////////////////////////////////////////
 // class TOverlappedDataBuffer
 VOID CALLBACK OverlappedReadCompleted(DWORD dwErrorCode, DWORD /*dwNumberOfBytesTransfered*/, LPOVERLAPPED lpOverlapped)
 {
 	TOverlappedDataBuffer* pBuffer = (TOverlappedDataBuffer*) lpOverlapped;
+
 	bool bEof = (dwErrorCode == ERROR_HANDLE_EOF ||
+		pBuffer->GetStatusCode() == STATUS_END_OF_FILE ||
 		(dwErrorCode == ERROR_SUCCESS && pBuffer->GetBytesTransferred() != pBuffer->GetRequestedDataSize()));
 
+	if (pBuffer->GetStatusCode() == STATUS_END_OF_FILE)
+		pBuffer->SetStatusCode(0);
+	pBuffer->SetErrorCode(dwErrorCode == ERROR_HANDLE_EOF ? ERROR_SUCCESS : dwErrorCode);
+
+	if (dwErrorCode != ERROR_SUCCESS)
+		ATLTRACE(_T("OverlappedReadCompleted error: %lu, status code: %I64u\n"), dwErrorCode, pBuffer->GetStatusCode());
+
 	pBuffer->SetLastPart(bEof);
 	pBuffer->RequeueAsFull();
 }
 
-VOID CALLBACK OverlappedWriteCompleted(DWORD /*dwErrorCode*/, DWORD /*dwNumberOfBytesTransfered*/, LPOVERLAPPED lpOverlapped)
+VOID CALLBACK OverlappedWriteCompleted(DWORD dwErrorCode, DWORD /*dwNumberOfBytesTransfered*/, LPOVERLAPPED lpOverlapped)
 {
 	TOverlappedDataBuffer* pBuffer = (TOverlappedDataBuffer*) lpOverlapped;
+	if (dwErrorCode != ERROR_SUCCESS)
+		ATLTRACE(_T("OverlappedWriteCompleted error: %lu, status code: %I64u\n"), dwErrorCode, pBuffer->GetStatusCode());
 
 	pBuffer->RequeueAsFinished();
 }