DWORD __usercall AMRUSBInterfaceWritePipe(LPVOID buffer,DWORD bufsize,AppleDevice *device,unsigned __int8 ctlNo) { void *_buffer; // edi@1 DWORD _bufsize; // esi@1 void *hEvent; // eax@3 void *_hEvent; // ebp@3 DWORD v9; // esi@7 void *v10; // eax@2 void *hPipe; // ecx@5 DWORD v12; // eax@7 DWORD v13; // eax@9 DWORD v14; // ST1C_4@9 void *v15; // eax@9 void *v16; // eax@11 DWORD NumberOfBytesTransferred; // [sp+8h] [bp-18h]@3 struct _OVERLAPPED Overlapped; // [sp+Ch] [bp-14h]@5 _bufsize = bufsize; _buffer = buffer; if ( !device ) { v10 = _CFStringMakeConstantString("_AMRUSBInterfaceWritePipe pAppleDevice == NULL"); AMRLog(3, v10); return 2003; } NumberOfBytesTransferred = 0; hEvent = CreateEventW(0, 1, 0, 0); _hEvent = hEvent; if ( !hEvent ) return GetLastError(); hPipe = device->hDeviceHandle; Overlapped.Internal = 0; Overlapped.InternalHigh = 0; *(_QWORD *)&Overlapped.Offset = 0i64; NumberOfBytesTransferred = 0; Overlapped.hEvent = hEvent; if ( DeviceIoControl(hPipe, (4 * ctlNo + 64) | 0x220002, _buffer, _bufsize, _buffer, _bufsize, 0, &Overlapped) ) { CloseHandle(_hEvent); return 0; } v12 = GetLastError(); v9 = v12; if ( v12 != 997 ) goto LABEL_10; v9 = 0; if ( !GetOverlappedResult(device->hDeviceHandle, &Overlapped, &NumberOfBytesTransferred, 1) ) { v13 = GetLastError(); v9 = v13; v14 = v13; v15 = _CFStringMakeConstantString("_AMRUSBInterfaceWritePipe: error %d"); AMRLog(3, v15, v14); LABEL_10: if ( v9 ) { v16 = _CFStringMakeConstantString("_AMRUSBInterfaceWritePipe: error %d"); AMRLog(3, v16, v9); } } CloseHandle(_hEvent); return v9; } int __usercall AMRUSBInterfaceReadPipe(LPVOID buffer,DWORD *pbufsize,AppleDevice *device,unsigned __int8 ctlNo) { void *_buf; // ebx@1 DWORD _bufsize; // esi@1 int result; // eax@2 void *v7; // eax@3 void *v8; // ebp@3 int v9; // esi@7 void *v10; // eax@2 DWORD v11; // ST1C_4@4 void *v12; // eax@4 void *v13; // ecx@5 DWORD v14; // eax@7 DWORD v15; // ST1C_4@9 void *v16; // eax@9 DWORD NumberOfBytesTransferred; // [sp+8h] [bp-18h]@1 struct _OVERLAPPED Overlapped; // [sp+Ch] [bp-14h]@5 _bufsize = *pbufsize; _buf = buffer; NumberOfBytesTransferred = 0; if ( device ) { v7 = CreateEventW(0, 1, 0, 0); v8 = v7; if ( v7 ) { v13 = device->hDeviceHandle; Overlapped.Internal = 0; Overlapped.InternalHigh = 0; *(_QWORD *)&Overlapped.Offset = 0i64; NumberOfBytesTransferred = 0; Overlapped.hEvent = v7; if ( DeviceIoControl(v13, (4 * ctlNo + 32) | 0x220001, _buf, _bufsize, _buf, _bufsize, 0, &Overlapped) ) { CloseHandle(v8); result = 0; } else { v14 = GetLastError(); v9 = v14; if ( v14 == 997 ) { v9 = 0; if ( !GetOverlappedResult(device->hDeviceHandle, &Overlapped, &NumberOfBytesTransferred, 1) ) { v15 = GetLastError(); v16 = _CFStringMakeConstantString("_AMRUSBInterfaceReadPipe: GetOverlappedResult error %d"); AMRLog(3, v16, v15); v9 = 2001; } } CloseHandle(v8); result = v9; } } else { v11 = GetLastError(); v12 = _CFStringMakeConstantString("_AMRUSBInterfaceReadPipe: CreateEvent error %d"); AMRLog(3, v12, v11); result = 2001; } } else { v10 = _CFStringMakeConstantString("_AMRUSBInterfaceReadPipe pAppleDevice == NULL"); AMRLog(3, v10); result = 2004; } return result; }