MiFreeKernelPadSections

void __fastcall MiFreeKernelPadSections(_QWORD *a1, int a2){
  int v2; 
  IMAGE_NT_HEADERS *v4; 
  int v5; 
  _MMPTE *PteBase; 
  __int64 v7; 
  int NumberOfSections; 
  _DWORD *v9; 
  _MMPTE *v10; 
  unsigned int v11; 
  __int64 v12; 
  unsigned int v13; 
  unsigned int v14; 
  v2 = a2;
  if( dword_140CFA1D8 != 2 )
  {
    v4 = RtlImageNtHeader(a1);
    v5 = 0;
    PteBase = MmGetPteBase();
    v7 = 0x7FFFFFFFF8i64;
    NumberOfSections = v4->FileHeader.NumberOfSections;
    v9 = (_DWORD *)((char *)&v4->OptionalHeader.Magic + v4->FileHeader.SizeOfOptionalHeader);
    if( v4->FileHeader.NumberOfSections )
    {
      v10 = PteBase;
      do
      {
        if( MiIsKernelHalPadSection((INT64)v9) )
        {
          v11 = v9[4];
          v12 = (unsigned int)v9[3];
          if( v11 < v9[2] )
            v11 = v9[2];
          ++v5;
          v13 = (v11 + 4095) & 0xFFFFF000;
          v14 = v13 + v12;
          if( v5 != 1 || dword_140CFA1D8 != 1 )
          {
            if( (MiFlags & 0x8000) != 0 )
            {
              VslReserveProtectedPages(0i64, (INT64)a1 + v12, v13 >> 12, 2ui64);
              v7 = 0x7FFFFFFFF8i64;
            }
            MiFreeInitializationCode(
              a1,
              (unsigned __int64)v10 + (v7 & (((unsigned __int64)a1 + v12) >> 9)),
              (__int64)v10 + (v7 & (((unsigned __int64)a1 + v14 - 1) >> 9)),
              1);
            v7 = 0x7FFFFFFFF8i64;
          }
        }
        v9 += 10;
        --NumberOfSections;
      }
      while( NumberOfSections );
      v2 = a2;
      PteBase = MmGetPteBase();
    }
    if( (MiFlags & 4) != 0 && (*(_QWORD *)&v2 & 0x1FFFFFi64) != 0 )
      MiFreeInitializationCode(
        a1,
        (unsigned __int64)PteBase + (v7 & (((unsigned __int64)a1 + (unsigned int)(v2 - (_DWORD)a1)) >> 9)),
        (__int64)PteBase + (v7 & (((unsigned __int64)a1 + ((v2 - (_DWORD)a1 + 0x1FFFFF) & 0xFFE00000) - 1) >> 9)),
        1);
  }
}

Referenced by:

MiInitializeDriverImages