HalpMcExportAllData

CHAR *__stdcall HalpMcExportAllData(UINT64 *a1, INT64 a2, POOL_TYPE a3){
  unsigned int v3; 
  VOID **PoolWithTag; 
  CHAR *result; 
  unsigned int v9; 
  unsigned int v10; 

  v3 = 0;
  v9 = 0;
  PoolWithTag = 0i64;
  if( *(&CmpDummyThreadEvent + 857) )
  {
    if( (unsigned int)(*(&CmpDummyThreadEvent + 857))(0i64, &v9, a2) == -1073741789 )
    {
      v9 = (v9 + 4095) & 0xFFFFF000;
      PoolWithTag = ExAllocatePoolWithTag((unsigned int)a3, v9, 543973704i64);
      if( PoolWithTag )
      {
        v10 = v9;
        if( (int)(*(&CmpDummyThreadEvent + 857))(PoolWithTag, &v10, a2) < 0 )
        {
          ExFreePoolWithTag(PoolWithTag, 0x206C6148u);
          PoolWithTag = 0i64;
        }
        if( PoolWithTag )
          v3 = v9;
      }
    }
  }
  result = (CHAR *)PoolWithTag;
  *(_DWORD *)a1 = v3;
  return result;
}

Referenced by:

HalpLoadMicrocode
HalpMcExportAndChargeNeededData