MiDeleteVaTail
NTSTATUS __stdcall MiDeleteVaTail(INT64 *a1){
_MMPTE *v1;
_EPROCESS *v3;
_MMPFN *v4;
unsigned __int64 Long;
_MMPFN *v6;
INT64 v8;
__int64 bf_0;
__int64 v10;
__int64 v11;
_MI_DELETE_VA_INFO *v12;
v1 = (_MMPTE *)a1[21];
MiTerminateWsleCluster((INT64)&v1[15]);
MiFlushTbList((_MI_TB_FLUSH_LIST *)a1[2]);
Long = v1->u.Long;
if( v1->u.Long )
{
v8 = a1[3];
if( (*(_BYTE *)(v8 + 184) & 7) != 0
&& Long >= (unsigned __int64)MmGetPml4eBase()
&& Long <= (unsigned __int64)MmGetPml4eLimit() )
{
bf_0 = v1[1].u.Hard._bf_0;
v10 = (_QWORD)MmGetPteBase() << 25;
v11 = 3i64;
do
{
Long = (__int64)((Long << 25) - v10) >> 16;
bf_0 = ((bf_0 << 25) - v10) >> 16;
--v11;
}
while( v11 );
MiReplicatePteChange((_MMPTE *)Long, (_MMPTE *)bf_0);
v8 = a1[3];
}
else
{
Long = 0i64;
bf_0 = 0i64;
}
MiDeletePteRun((_MMPTE *)v8, v1, v3, v4, v12);
if( Long )
MiReplicatePteChange((_MMPTE *)Long, (_MMPTE *)bf_0);
v1->u.Long = 0i64;
}
v6 = (_MMPFN *)v1[11].u.Long;
if( v6 )
{
MiDecayPfnFullyInitialized(v6);
v1[11].u.Long = 0i64;
}
return 0;
}Referenced by:
MiDeletePagablePteRange