private unsafe void _PipeIOCallback(uint errorCode, uint numBytes, NativeOverlapped *pOverlapped) { try { Exception error = null; if (errorCode != 0) { error = new Win32Exception((int)errorCode, "Asynchronous operation on WinUSB device failed."); } Overlapped overlapped = Overlapped.Unpack(pOverlapped); WinUSBAsyncResult result = (WinUSBAsyncResult)overlapped.AsyncResult; Overlapped.Free(pOverlapped); pOverlapped = null; result.OnCompletion(false, error, (int)numBytes, true); } finally { if (pOverlapped != null) { Overlapped.Unpack(pOverlapped); Overlapped.Free(pOverlapped); } } }
private unsafe void _HandleOverlappedAPI(bool success, string errorMessage, NativeOverlapped *pOverlapped, WinUSBAsyncResult result, int bytesTransferred) { if (!success) { if (Marshal.GetLastWin32Error() != NativeInterface.ERROR_IO_PENDING) { Overlapped.Unpack(pOverlapped); Overlapped.Free(pOverlapped); throw new Win32Exception(errorMessage); } } else { // Immediate success! Overlapped.Unpack(pOverlapped); Overlapped.Free(pOverlapped); result.OnCompletion(true, null, bytesTransferred, false); } }
private unsafe void _HandleOverlappedAPI(bool success, string errorMessage, NativeOverlapped* pOverlapped, WinUSBAsyncResult result, int bytesTransferred) { if (!success) { if (Marshal.GetLastWin32Error() != NativeInterface.ERROR_IO_PENDING) { Overlapped.Unpack(pOverlapped); Overlapped.Free(pOverlapped); throw new Win32Exception(errorMessage); } } else { // Immediate success! Overlapped.Unpack(pOverlapped); Overlapped.Free(pOverlapped); result.OnCompletion(true, null, bytesTransferred, false); } }