UlGetOverlappedResult( IntPtr pUnmanagedOverlapped, // pointer to overlapped structure ref int pNumberOfBytesTransferred, // pointer to actual bytes count bool bWait // wait flag ) { GlobalLog.Print("Entering UlGetOverlappedResult(" + Convert.ToString(pUnmanagedOverlapped) + ")"); if (hDevice == NativeMethods.INVALID_HANDLE_VALUE) { return(NativeMethods.ERROR_INVALID_PARAMETER); } if ((long)pUnmanagedOverlapped == 0) { return(NativeMethods.ERROR_INVALID_PARAMETER); } if (bWait) { AutoResetEvent m_Event = new AutoResetEvent(false); m_Event.SetHandle(Marshal.ReadInt32(pUnmanagedOverlapped + Win32.OverlappedhEventOffset)); bOK = m_Event.WaitOne(); pNumberOfBytesTransferred = Marshal.ReadInt32(pUnmanagedOverlapped + Win32.OverlappedInternalHighOffset); } else { pNumberOfBytesTransferred = Marshal.ReadInt32(pUnmanagedOverlapped + Win32.OverlappedInternalHighOffset); if (Marshal.ReadInt32(pUnmanagedOverlapped + Win32.OverlappedInternalOffset) == NativeMethods.ERROR_IO_PENDING) { return(NativeMethods.ERROR_IO_INCOMPLETE); } } return(Marshal.ReadInt32(pUnmanagedOverlapped + Win32.OverlappedInternalOffset)); } // UlGetOverlappedResult