MiParseComAndCetHeaders

INT64 __fastcall MiParseComAndCetHeaders(INT64 *a1, UINT64 *a2, BYTE *a3){
  unsigned int v6; 
  __int64 v7; 
  unsigned int v8; 
  unsigned int v9; 
  unsigned int v10; 
  _FILE_OBJECT *v12; 
  INT64 v13; 
  __int64 v14; 
  int v15; 
  __int64 v16; 
  char v17; 
  char v18; 
  INT64 v19; 
  unsigned int i; 
  __int64 v21; 
  unsigned int v22; 
  int v23; 
  unsigned int v24; 
  NTSTATUS v25; 
  _FILE_OBJECT *v26; 
  unsigned int v27; 
  INT64 v28; 
  __int64 v29; 
  INT64 result[10]; 
  __int128 v31; 
  __int128 v32; 
  __int128 v33; 
  __int128 v34; 
  __int64 v35; 
  memset((INT64)result, 0i64);
  v6 = 0;
  v26 = 0i64;
  *a3 = 0;
  v7 = *((unsigned int *)a2 + 20);
  if( (_DWORD)v7 )
  {
    if( (v7 & 3) == 0 )
    {
      v8 = *((_DWORD *)a2 + 21);
      if( v8 >= 0x48
        && (unsigned int)v7 + v8 > (unsigned int)v7
        && v7 + 72 <= (unsigned __int64)*((unsigned int *)a2 + 4) )
      {
        v6 = 1;
      }
    }
  }
  v9 = *((_DWORD *)a2 + 26);
  if( v9 )
  {
    if( (v9 & 3) == 0 )
    {
      v10 = *((_DWORD *)a2 + 27);
      if( v10 >= 0x1C && v10 + v9 > v9 && v10 + v9 <= *((_DWORD *)a2 + 4) )
        v6 |= 2u;
    }
  }
  if( !v6 )
    return 0i64;
  v25 = MiMapImageInSystemSpace((__int64)a1, 3, (__int64)result);
  if( v25 >= 0 )
  {
    v12 = MiReferenceControlAreaFile((_CONTROL_AREA *)a1);
    v26 = v12;
    v6 |= 0xCu;
    v13 = *a1;
    v28 = result[0];
    if( (v6 & 1) != 0 )
    {
      v14 = *((unsigned int *)a2 + 20);
      v31 = *(_OWORD *)(result[0] + v14);
      v32 = *(_OWORD *)(result[0] + v14 + 16);
      v33 = *(_OWORD *)(result[0] + v14 + 32);
      v34 = *(_OWORD *)(result[0] + v14 + 48);
      v35 = *(_QWORD *)(result[0] + v14 + 64);
      MiLogRelocationRva(v14, 0x48u, v12, (__int64)a1);
      v15 = v32;
      if( (v32 & 1) != 0 )
      {
        *a3 = 1;
        *(_BYTE *)(v13 + 15) |= 1u;
        if( WORD2(v31) > 2u || WORD2(v31) == 2 && WORD3(v31) >= 5u )
        {
          v16 = *(_QWORD *)(v13 + 56);
          v17 = *(_BYTE *)(v16 + 51) | 2;
          *(_BYTE *)(v16 + 51) = v17;
          if( (v15 & 0x20002) != 2 && (*(_BYTE *)(v13 + 14) & 0x40) != 0 )
          {
            v18 = v17 | 1;
            *(_BYTE *)(v16 + 51) = v18;
            if( (v15 & 0x20000) != 0 )
              *(_BYTE *)(v16 + 51) = v18 | 0x20;
          }
        }
      }
    }
    if( (v6 & 2) != 0 )
    {
      v19 = v28 + *((unsigned int *)a2 + 26);
      for( i = 0; ; i = v27 + 1 )
      {
        v27 = i;
        v21 = (*((unsigned int *)a2 + 27) * (unsigned __int128)0x2492492492492493ui64) >> 64;
        if( i >= (v21 + (((unsigned __int64)*((unsigned int *)a2 + 27) - v21) >> 1)) >> 4 )
          break;
        MiLogRelocationRva(*((_DWORD *)a2 + 26) + 28 * i, 0x1Cu, v26, (__int64)a1);
        v29 = *(_QWORD *)(v19 + 16);
        if( HIDWORD(*(_OWORD *)v19) == 20 )
        {
          if( !HIDWORD(v29) )
            break;
          if( (v29 & 0x300000000i64) != 0 )
            break;
          if( !(_DWORD)v29 )
            break;
          if( (v29 & 3) != 0 )
            break;
          v22 = *((_DWORD *)a2 + 4);
          if( (unsigned int)v29 >= v22 || HIDWORD(v29) >= v22 || HIDWORD(v29) + (int)v29 >= v22 )
            break;
          MiLogRelocationRva(HIDWORD(v29), 4u, v26, (__int64)a1);
          v23 = *(_DWORD *)(v28 + HIDWORD(v29));
          if( (v23 & 1) != 0 )
            *(_DWORD *)(*(_QWORD *)(v13 + 56) + 76i64) |= 1u;
          if( (v23 & 2) != 0 )
            *(_DWORD *)(*(_QWORD *)(v13 + 56) + 76i64) |= 2u;
          if( (v23 & 4) != 0 )
            *(_DWORD *)(*(_QWORD *)(v13 + 56) + 76i64) |= 4u;
          if( (v23 & 8) != 0 )
            *(_DWORD *)(*(_QWORD *)(v13 + 56) + 76i64) |= 8u;
          if( (v23 & 0x10) != 0 )
            *(_DWORD *)(*(_QWORD *)(v13 + 56) + 76i64) |= 0x10u;
          v24 = v25;
          if( (v23 & 0x20) != 0 )
            *(_DWORD *)(*(_QWORD *)(v13 + 56) + 76i64) |= 0x20u;
          goto LABEL_50;
        }
        v19 += 28i64;
      }
    }
  }
  v24 = v25;
LABEL_50:
  if( (v6 & 4) != 0 )
    MiUnmapImageInSystemSpace((INT64)result);
  if( v6 >= 8 )
    MiDereferenceControlAreaFile((__int64)a1, (unsigned __int64)v26);
  return v24;
}

Referenced by:

No references.