Index: trunk/core/winmad/user/wm_provider.cpp
===================================================================
--- trunk/core/winmad/user/wm_provider.cpp	(revision 2893)
+++ trunk/core/winmad/user/wm_provider.cpp	(working copy)
@@ -187,8 +187,11 @@
 	bytes = (DWORD) sizeof(WM_MAD) + pMad->Length;
 	if (pOverlapped == NULL) {
 		EnterCriticalSection(&m_CritSecWrite);
-		WriteFile(m_hFile, pMad, bytes, &bytes, &m_OverlapWrite);
-		hr = GetOverlappedResult(&m_OverlapWrite, &bytes, TRUE);
+		if (WriteFile(m_hFile, pMad, bytes, &bytes, &m_OverlapWrite)) {
+			hr = GetOverlappedResult(&m_OverlapWrite, &bytes, TRUE);
+		} else {
+			hr = HRESULT_FROM_WIN32(GetLastError());
+		}
 		LeaveCriticalSection(&m_CritSecWrite);
 	} else {
 		if (WriteFile(m_hFile, pMad, bytes, &bytes, pOverlapped)) {
@@ -209,8 +212,11 @@
 
 	if (pOverlapped == NULL) {
 		EnterCriticalSection(&m_CritSecRead);
-		ReadFile(m_hFile, pMad, (DWORD) BufferSize, &bytes, &m_OverlapRead);
-		hr = GetOverlappedResult(&m_OverlapRead, &bytes, TRUE);
+		if (ReadFile(m_hFile, pMad, (DWORD) BufferSize, &bytes, &m_OverlapRead)) {
+			hr = GetOverlappedResult(&m_OverlapRead, &bytes, TRUE);
+		} else {
+			hr = HRESULT_FROM_WIN32(GetLastError());
+		}
 		LeaveCriticalSection(&m_CritSecRead);
 	} else {
 		if (ReadFile(m_hFile, pMad, (DWORD) BufferSize, &bytes, pOverlapped)) {
