\r
if (lpOverlapped == NULL) {\r
EnterCriticalSection(&m_CritSecWrite);\r
- DeviceIoControl(hDevice, dwIoControlCode,\r
- lpInBuffer, nInBufferSize,\r
- lpOutBuffer, nOutBufferSize,\r
- lpBytesReturned, &m_OverlapWrite);\r
- ret = ::GetOverlappedResult(m_hFile, &m_OverlapWrite, lpBytesReturned, TRUE);\r
+ ret = DeviceIoControl(hDevice, dwIoControlCode,\r
+ lpInBuffer, nInBufferSize,\r
+ lpOutBuffer, nOutBufferSize,\r
+ lpBytesReturned, &m_OverlapWrite);\r
+ if (!ret && GetLastError() == ERROR_IO_PENDING) {\r
+ ret = ::GetOverlappedResult(m_hFile, &m_OverlapWrite,\r
+ lpBytesReturned, TRUE);\r
+ }\r
LeaveCriticalSection(&m_CritSecWrite);\r
} else {\r
ret = DeviceIoControl(hDevice, dwIoControlCode,\r
\r
if (lpOverlapped == NULL) {\r
EnterCriticalSection(&m_CritSec);\r
- DeviceIoControl(hDevice, dwIoControlCode,\r
- lpInBuffer, nInBufferSize,\r
- lpOutBuffer, nOutBufferSize,\r
- lpBytesReturned, &m_Overlap);\r
-\r
- ret = GetOverlappedResult(hDevice, &m_Overlap, lpBytesReturned, TRUE);\r
+ ret = DeviceIoControl(hDevice, dwIoControlCode,\r
+ lpInBuffer, nInBufferSize,\r
+ lpOutBuffer, nOutBufferSize,\r
+ lpBytesReturned, &m_Overlap);\r
+ if (!ret && GetLastError() == ERROR_IO_PENDING) {\r
+ ret = GetOverlappedResult(hDevice, &m_Overlap, lpBytesReturned, TRUE);\r
+ }\r
LeaveCriticalSection(&m_CritSec);\r
} else {\r
ret = DeviceIoControl(hDevice, dwIoControlCode,\r