WbHeapExecuteCall

__int64 __fastcall WbHeapExecuteCall(_EX_PUSH_LOCK *a1, _QWORD *a2, char *a3, size_t a4){
  int HeapExecutedBlock; 
  INT64 v9; 
  _EWOW64PROCESS *WoW64Process; 
  _EWOW64PROCESS *v11; 
  unsigned __int16 Machine; 
  _EWOW64PROCESS *v14; 
  unsigned __int16 v15; 
  unsigned __int16 v16; 
  _EWOW64PROCESS *v17; 
  INT64 v18; 
  INT64 *v19; 
  INT64 v20[2]; 
  __int64 v21; 
  INT64 v22[42]; 

  v19 = 0i64;
  v18 = 0i64;
  v21 = 0i64;
  *(_OWORD *)v20 = 0i64;
  memset(v22, 0i64, sizeof(v22));
  HeapExecutedBlock = WbValidateHeapExecuteCallArguments((INT64)a2, a4, (INT64)v22);
  if( HeapExecutedBlock >= 0 )
  {
    HeapExecutedBlock = WbGetHeapExecutedBlock((UINT64 *)a1, (INT64)v22, &v19);
    if( HeapExecutedBlock >= 0 )
    {
      HeapExecutedBlock = WbGetWarbirdThread((INT64)a1, v9, (INT64 **)&v18);
      if( HeapExecutedBlock >= 0 )
      {
        HeapExecutedBlock = WbGetTrapFrame(v18, (INT64)v20);
        if( HeapExecutedBlock >= 0 )
        {
          HeapExecutedBlock = sub_14065F400(v18, (__int64)v19, v20[1], v20[0], v21);
          if( HeapExecutedBlock >= 0 )
          {
            HeapExecutedBlock = WbUpdateHeapExecutedCallArgumentList((__int64)v22, (__int64)v19, v20, a2, a3, a4);
            if( HeapExecutedBlock >= 0 )
            {
              WoW64Process = KeGetCurrentThread()->ApcState.Process->WoW64Process;
              if( !WoW64Process )
                goto LABEL_8;
              Machine = WoW64Process->Machine;
              if( Machine != 332 && Machine != 452 )
                goto LABEL_8;
              v14 = KeGetCurrentThread()->ApcState.Process->WoW64Process;
              if( !v14 )
                goto LABEL_18;
              v15 = v14->Machine;
              if( !v15 )
                goto LABEL_18;
              if( v15 != 332 )
              {
                if( v15 != 452 )
                {
LABEL_18:
                  HeapExecutedBlock = -1073741637;
                  goto LABEL_11;
                }
              }
              else
              {
LABEL_8:
                LODWORD(v21) = v21 & 0xFFFFFEFF;
              }
              v20[1] = v19[3];
              HeapExecutedBlock = WbSetTrapFrame(v18, (INT64)v20);
              if( HeapExecutedBlock >= 0 )
              {
                v11 = KeGetCurrentThread()->ApcState.Process->WoW64Process;
                if( v11 )
                {
                  v16 = v11->Machine;
                  if( v16 == 332 || v16 == 452 )
                  {
                    v17 = KeGetCurrentThread()->ApcState.Process->WoW64Process;
                    if( v17 && v17->Machine == 332 )
                      HeapExecutedBlock = v20[1];
                  }
                }
              }
            }
          }
        }
      }
    }
  }
LABEL_11:
  sub_14065E6C8(a1, v18);
  sub_14065EF2C(a1, (__int64)v19);
  return(unsigned int)HeapExecutedBlock;
}

Referenced by:

WbDispatchOperation