MiMapSystemImage
VOID __fastcall MiMapSystemImage(_SECTION *Section, VOID *MappedBase, UINT64 LoadFlags){
_SECTION *v6;
_CONTROL_AREA *v7;
UINT64 TotalNumberOfPtes;
char v9;
int v10;
unsigned int v11;
_MMPTE *v12;
char *v13;
__int64 v14;
__int64 v15;
unsigned int v16;
INT64 v17;
INT64 v18;
_MMPTE *PteAddress;
_MMPTE *v20;
int v21;
_MMPTE *v22;
UINT64 SessionId;
INT64 v24;
_MMPTE *v25;
_LARGE_INTEGER SectionOffset;
SectionOffset.QuadPart = 0i64;
v7 = MiSectionControlArea(Section);
TotalNumberOfPtes = v7->Segment->TotalNumberOfPtes;
if( (v9 & 1) == 0 )
{
v10 = 1;
v11 = -1;
if( MiChargeSystemImageCommitment(v6, 1ui64) < 0 )
return;
goto LABEL_3;
}
LOBYTE(v14) = MiBytesToMapSystemImage((_FAST_MUTEX *)(TotalNumberOfPtes << 12));
v15 = v14;
if( !v14 )
return;
v10 = 0;
v16 = MmGetSessionIdEx(KeGetCurrentThread()->ApcState.Process);
v11 = v16;
if( (v7->u.LongFlags & 0x4000000) != 0 )
{
MiCreatePerSessionProtos(v7, v16, v17, v18, SessionId, v24);
if( v21 < 0 )
return;
}
MiGetPteAddress((char *)MappedBase + v15 - 1);
PteAddress = MiGetPteAddress(MappedBase);
if( MiMakeZeroedPageTables(PteAddress, v20, 1ui64, MiVaSessionSpace) )
{
LABEL_3:
v12 = MiGetPteAddress(MappedBase);
v13 = 0i64;
v25 = v12;
if( LoadFlags )
{
v13 = (char *)MappedBase + 4096 * (unsigned __int64)v7->Segment->TotalNumberOfPtes;
if( MiMapPatchTable(v13, LoadFlags) < 0 )
{
LABEL_22:
if( v10 == 1 )
{
MiChargeSystemImageCommitment(Section, 0i64);
}
else if( (v7->u.LongFlags & 0x4000000) != 0 )
{
MiDereferencePerSessionProtos(v7, v11);
}
if( MiGetSystemRegionType((UINT64)MappedBase) == 1 && MappedBase != v7->Segment->BasedAddress )
MiDeleteSessionDriverProtos(v7);
return;
}
v12 = v25;
}
LODWORD(SessionId) = v11;
if( MiAddMappedPtes(v12, TotalNumberOfPtes, v7, &SectionOffset, SessionId) >= 0 )
{
if( v10 == 1 )
_InterlockedExchangeAdd((_DWORD *)&xmmword_140C4CA88 + 3, TotalNumberOfPtes);
return;
}
if( v13 )
{
v22 = MiGetPteAddress(v13);
MiUnmapPatchTable((UINT64)v22);
}
goto LABEL_22;
}
if( (v7->u.LongFlags & 0x4000000) != 0 )
MiDereferencePerSessionProtos(v7, v11);
}Referenced by:
MiApplyHotPatchToLoadedDriver
MmLoadSystemImageEx