rendered paste bodyint __usercall sendCommandToDevice<eax>(AMRecoveryModeDevice *amrecd<esi>,void *cfsCommand)
{
char *_szCommand; // eax@1
unsigned int v3; // eax@3
int result; // eax@4
unsigned int _cmdLen; // ebp@5
signed int v6; // eax@10
int _writeSize; // edi@13
char v8; // cl@2
unsigned __int8 v9; // dl@9
AppleDevice *v10; // ebx@9
AppleDevice *v11; // ebx@14
char *buffer; // [sp+Ch] [bp-434h]@1
unsigned int v13; // [sp+43Ch] [bp-4h]@1
char szCommand[1028]; // [sp+38h] [bp-408h]@1
int v15; // [sp+18h] [bp-428h]@8
ControlRequest cmdRequest; // [sp+20h] [bp-420h]@9
DWORD pbufsize; // [sp+10h] [bp-430h]@9
ControlResponse cmdResponse; // [sp+2Ch] [bp-414h]@10
char ctlNo; // [sp+1Ch] [bp-424h]@14
v13 = (unsigned int)&buffer ^ security_cookie;
CFStringGetCString(cfsCommand, szCommand, 1024, 134217984);
strcat_s(szCommand, 0x400u, L"\n");
_szCommand = szCommand;
do
v8 = *_szCommand++;
while ( v8 );
v3 = _szCommand - &szCommand[1];
if ( v3 < 0x400 )
{
_cmdLen = (v3 + 15) & 0xFFFFFFF0;
if ( _cmdLen > v3 )
memset(&szCommand[v3], 0, _cmdLen - v3);
buffer = szCommand;
if ( _cmdLen > 0 )
{
v15 = 0;
do
{
v9 = amrecd->nControlWrite;
v10 = amrecd->m_pAppleDevicePipe;
cmdRequest.userData2 = v15;
pbufsize = 12;
cmdRequest.nReqNo = 3;
cmdRequest.wMagic = 4660;
cmdRequest.nExtraSize = 8;
cmdRequest.userData1 = _cmdLen;
if ( AMRUSBInterfaceWritePipe(&cmdRequest, 0xCu, v10, v9) )
break;
v6 = AMRUSBInterfaceReadPipe(&cmdResponse, &pbufsize, amrecd->m_pAppleDevicePipe, amrecd->nControlRead);
if ( v6 )
break;
if ( pbufsize == v6 || (_BYTE)cmdResponse.nExtraSize != 8 )
break;
_writeSize = cmdResponse.userData1;
if ( cmdResponse.userData1 )
{
v11 = amrecd->m_pAppleDevicePipe;
ctlNo = amrecd->nExtraDataWrite;
if ( AMRUSBInterfaceWritePipe(buffer, cmdResponse.userData1, v11, ctlNo) )
break;
_cmdLen -= _writeSize;
buffer += _writeSize;
}
}
while ( _cmdLen );
}
result = -(_cmdLen != 0) & 6;
}
else
{
result = 1;
}
return result;
}