ApiSetResolveToHost

INT64 __fastcall ApiSetResolveToHost(_DWORD *a1, UINT16 *a2, INT64 a3, CHAR *a4, INT64 HostBinary){
  CHAR v6; 
  __int64 v9; 
  WCHAR *v10; 
  unsigned __int64 v11; 
  INT64 result; 
  unsigned int v13; 
  _WORD *v14; 
  UINT16 v15; 
  CHAR *v16; 
  char *v17; 
  v6 = 0;
  *(_OWORD *)HostBinary = 0i64;
  v9 = *a2;
  if( (unsigned int)v9 >= 8 )
  {
    v10 = (WCHAR *)*((_QWORD *)a2 + 1);
    v11 = *(_QWORD *)v10 & 0xFFFFFFDFFFDFFFDFui64;
    if( v11 == 0x2D004900500041i64 || v11 == 0x2D005400580045i64 )
    {
      v13 = v9;
      v14 = (WCHAR *)((char *)v10 + v9);
      do
      {
        if( v13 <= 1 )
          break;
        v13 -= 2;
        --v14;
      }
      while( *v14 != 45 );
      v15 = (unsigned __int16)v13 >> 1;
      if( v15 )
      {
        v16 = ApiSetpSearchForApiSet(a1, v10, v15);
        if( v16 )
        {
          if( a3 && *((_DWORD *)v16 + 5) > 1u )
          {
            v17 = (char *)ApiSetpSearchForApiSetHost(
                            (INT64)v16,
                            *(const WCHAR **)(a3 + 8),
                            *(_WORD *)a3 >> 1,
                            (INT64)a1);
            goto LABEL_14;
          }
          if( *((_DWORD *)v16 + 5) )
          {
            v17 = (char *)a1 + *((unsigned int *)v16 + 4);
LABEL_14:
            v6 = 1;
            *(_QWORD *)(HostBinary + 8) = (char *)a1 + *((unsigned int *)v17 + 3);
            *(_WORD *)(HostBinary + 2) = *((_WORD *)v17 + 8);
            *(_WORD *)HostBinary = *((_WORD *)v17 + 8);
          }
        }
      }
    }
  }
  result = 0i64;
  *a4 = v6;
  return result;
}

Referenced by:

ExIsMultiSessionSku
MiResolveImageReferences