MiParseComAndCetHeaders

NTSTATUS __stdcall MiParseComAndCetHeaders(_CONTROL_AREA *ControlArea, UINT64 *a2, _BYTE *a3){
  unsigned int v6; 
  __int64 v7; 
  unsigned int v8; 
  unsigned int v9; 
  unsigned int v10; 
  _FILE_OBJECT *v12; 
  _SEGMENT *Segment; 
  __int64 v14; 
  int v15; 
  union {_MI_SECTION_IMAGE_INFORMATION *ImageInformation;void *FirstMappedVa;} v16; 
  unsigned __int8 v17; 
  unsigned __int8 v18; 
  __int64 v19; 
  unsigned int i; 
  __int64 v21; 
  unsigned int v22; 
  int v23; 
  NTSTATUS v24; 
  NTSTATUS v25; 
  _FILE_OBJECT *FileObject; 
  unsigned int v27; 
  __int64 v28; 
  unsigned __int64 v29; 
  _MI_SYSTEM_SPACE_IMAGE SystemImageInfo[20]; 
  __int128 v31; 
  __int128 v32; 
  __int128 v33; 
  __int128 v34; 
  __int64 v35; 

  memset(SystemImageInfo, 0i64, sizeof(SystemImageInfo));
  v6 = 0;
  FileObject = 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 0;
  v25 = MiMapImageInSystemSpace(ControlArea, 3ui64, SystemImageInfo);
  if( v25 >= 0 )
  {
    v12 = MiReferenceControlAreaFile(ControlArea);
    FileObject = v12;
    v6 |= 0xCu;
    Segment = ControlArea->Segment;
    v28 = *(_QWORD *)SystemImageInfo;
    if( (v6 & 1) != 0 )
    {
      v14 = *((unsigned int *)a2 + 20);
      v31 = *(_OWORD *)(*(_QWORD *)SystemImageInfo + v14);
      v32 = *(_OWORD *)(*(_QWORD *)SystemImageInfo + v14 + 16);
      v33 = *(_OWORD *)(*(_QWORD *)SystemImageInfo + v14 + 32);
      v34 = *(_OWORD *)(*(_QWORD *)SystemImageInfo + v14 + 48);
      v35 = *(_QWORD *)(*(_QWORD *)SystemImageInfo + v14 + 64);
      MiLogRelocationRva((unsigned int)v14, 0x48ui64, v12, ControlArea);
      v15 = v32;
      if( (v32 & 1) != 0 )
      {
        *a3 = 1;
        Segment->SegmentFlags.UChar2 |= 1u;
        if( WORD2(v31) > 2u || WORD2(v31) == 2 && WORD3(v31) >= 5u )
        {
          v16.ImageInformation = (_MI_SECTION_IMAGE_INFORMATION *)Segment->u2;
          v17 = v16.ImageInformation->ExportedImageInformation.ImageFlags | 2;
          v16.ImageInformation->ExportedImageInformation.ImageFlags = v17;
          if( (v15 & 0x20002) != 2 && (Segment->SegmentFlags.UChar1 & 0x40) != 0 )
          {
            v18 = v17 | 1;
            v16.ImageInformation->ExportedImageInformation.ImageFlags = v18;
            if( (v15 & 0x20000) != 0 )
              v16.ImageInformation->ExportedImageInformation.ImageFlags = 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, 0x1Cui64, FileObject, ControlArea);
        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), 4ui64, FileObject, ControlArea);
          v23 = *(_DWORD *)(v28 + HIDWORD(v29));
          if( (v23 & 1) != 0 )
            *((_DWORD *)&Segment->u2.ImageInformation->InternalImageInformation + 3) |= 1u;
          if( (v23 & 2) != 0 )
            *((_DWORD *)&Segment->u2.ImageInformation->InternalImageInformation + 3) |= 2u;
          if( (v23 & 4) != 0 )
            *((_DWORD *)&Segment->u2.ImageInformation->InternalImageInformation + 3) |= 4u;
          if( (v23 & 8) != 0 )
            *((_DWORD *)&Segment->u2.ImageInformation->InternalImageInformation + 3) |= 8u;
          if( (v23 & 0x10) != 0 )
            *((_DWORD *)&Segment->u2.ImageInformation->InternalImageInformation + 3) |= 0x10u;
          v24 = v25;
          if( (v23 & 0x20) != 0 )
            *((_DWORD *)&Segment->u2.ImageInformation->InternalImageInformation + 3) |= 0x20u;
          goto LABEL_50;
        }
        v19 += 28i64;
      }
    }
  }
  v24 = v25;
LABEL_50:
  if( (v6 & 4) != 0 )
    MiUnmapImageInSystemSpace(SystemImageInfo);
  if( v6 >= 8 )
    MiDereferenceControlAreaFile(ControlArea, FileObject);
  return v24;
}

Referenced by:

No references.