All pastes #604982 Raw Edit

Stuff

public cpp v1 · immutable
·published 2007-07-05 21:44 UTC
rendered paste body
int __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;}