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