MiAddPrivateFixupEntryForSystemImage

NTSTATUS __stdcall MiAddPrivateFixupEntryForSystemImage(_CONTROL_AREA *ControlArea, VOID *ImageBaseAddress){
  _RTL_BITMAP *Pool; 
  _QWORD *v5; 
  _RTL_BITMAP *v6; 
  unsigned __int64 v7; 
  _QWORD *v8; 

  Pool = (_RTL_BITMAP *)MiAllocatePool(
                          64i64,
                          8
                        * (((unsigned __int64)ControlArea->Segment->TotalNumberOfPtes >> 6)
                         + ((ControlArea->Segment->TotalNumberOfPtes & 0x3F) != 0)
                         + 2i64),
                          0x69536D4Dui64);
  if( !Pool )
    return 0;
  v5 = MiAllocatePool(64i64, 0x38ui64, 0x6946694Dui64);
  v6 = Pool;
  if( !v5 )
  {
LABEL_6:
    ExFreePoolWithTag(v6, 0);
    return 0;
  }
  MiInitializePrivateFixupBitmap(Pool, ControlArea);
  v5[5] = Pool;
  v5[6] = ControlArea;
  v5[2] = ImageBaseAddress;
  v5[3] = (char *)ImageBaseAddress + (ControlArea->Segment->TotalNumberOfPtes << 12) - 1;
  v5[4] = ControlArea->Segment->ExtendInfo;
  if( MiGetSystemRegionType((UINT64)ImageBaseAddress) == 1
    && (ControlArea->u.LongFlags & 0x800) == 0
    && !MiCreateSessionDriverProtos(ControlArea, ImageBaseAddress, (_MI_SYSTEM_IMAGE_PRIVATE_FIXUP *)v5) )
  {
    ExFreePoolWithTag(v5, 0);
    v6 = Pool;
    goto LABEL_6;
  }
  v7 = (unsigned __int8)ExAcquireSpinLockExclusive(&unk_140C4CA24);
  v8 = (_QWORD *)qword_140C4CA08;
  if( *(__int64 **)qword_140C4CA08 != &qword_140C4CA00 )
    __fastfail(3u);
  *v5 = &qword_140C4CA00;
  v5[1] = v8;
  *v8 = v5;
  qword_140C4CA08 = (__int64)v5;
  ExReleaseSpinLockExclusiveFromDpcLevel(&unk_140C4CA24);
  __writecr8(v7);
  return 1;
}

Referenced by:

MiGetSystemAddressForImage