MiFreeLargePageView
VOID __stdcall MiFreeLargePageView(_EPROCESS *TargetProcess, _MMVAD_SHORT *Vad, UINT64 Flags){
char v3;
__int64 v4;
unsigned __int64 v6;
_ETHREAD *CurrentThread;
int v9;
void *v10;
v4 = *((unsigned int *)Vad + 13);
LODWORD(v4) = v4 & 0x7FFFFFFF;
v6 = v4 | ((unsigned __int64)*((unsigned __int8 *)Vad + 34) << 31);
if( v6 )
{
CurrentThread = (_ETHREAD *)KeGetCurrentThread();
_InterlockedExchangeAdd64((volatile signed __int64 *)TargetProcess + 254, -(__int64)v6);
if( !Flags || !*(_QWORD *)(Flags + 24) )
{
v9 = v3 & 1;
if( (v3 & 1) == 0 )
LOCK_ADDRESS_SPACE_SHARED(CurrentThread, TargetProcess);
MiReturnFullProcessCommitment((ULONG_PTR)TargetProcess, v6);
if( !v9 )
UNLOCK_ADDRESS_SPACE_SHARED((__int64)CurrentThread, (__int64)TargetProcess);
}
}
if( Flags )
{
v10 = *(void **)(Flags + 24);
if( v10 )
ObfDereferenceObjectWithTag(v10, 0x746C6644ui64);
}
}Referenced by:
MiDeletePartialCloneVads
MiReleaseVadEventBlocks