MiAllocateFixupVad
_MMVAD *__stdcall MiAllocateFixupVad(_MMVAD *Vad){
_CONTROL_AREA *ControlArea;
VOID *Pool;
_MMVAD *v4;
unsigned __int64 v5;
int v6;
_MMVAD *result;
ControlArea = Vad->Subsection->ControlArea;
if( !ControlArea->u2.SeImageStub->DynamicRelocations )
return 0i64;
Pool = MiAllocatePool(
64i64,
8
* (((unsigned __int64)ControlArea->Segment->TotalNumberOfPtes >> 6)
+ ((ControlArea->Segment->TotalNumberOfPtes & 0x3F) != 0)
+ 20i64),
0x49646156ui64);
v4 = (_MMVAD *)Pool;
if( !Pool )
return 0i64;
*($AFD36CF592B801F1959B792F1D304775 *)Pool = Vad->Core.0;
*((_OWORD *)Pool + 1) = *(_OWORD *)&Vad->Core.VadNode._bf_0;
*((_OWORD *)Pool + 2) = *(_OWORD *)&Vad->Core.StartingVpnHigh;
*((_OWORD *)Pool + 3) = *(_OWORD *)&Vad->Core.u.LongFlags;
*((_OWORD *)Pool + 4) = *(_OWORD *)&Vad->u2.LongFlags2;
*((_OWORD *)Pool + 5) = *(_OWORD *)&Vad->FirstPrototypePte;
*((_OWORD *)Pool + 6) = Vad->ViewLinks;
*((_OWORD *)Pool + 7) = *(_OWORD *)&Vad->VadsProcess;
*((_QWORD *)Pool + 16) = Vad->FileObject;
*((_QWORD *)Pool + 17) = -4096 * (((__int64)Vad->FirstPrototypePte - *(_QWORD *)ControlArea[1].gap8) >> 3)
+ ((Vad->Core.StartingVpn | ((unsigned __int64)Vad->Core.StartingVpnHigh << 32)) << 12)
- (unsigned __int64)ControlArea->Segment->ExtendInfo;
LODWORD(v5) = MiInitializePrivateFixupBitmap((_RTL_BITMAP *)Pool + 9, ControlArea);
v6 = (v5 ^ v4->Core.u1.LongFlags1) & 0x7FFFFFFF;
v4->Core.CommitChargeHigh = v5 >> 31;
v4->Core.u1.LongFlags1 ^= v6;
result = v4;
v4->Core.u.LongFlags |= 0x200000u;
return result;
}Referenced by:
MiMapViewOfImageSection