MiDeleteTransitionPte
INT64 __fastcall MiDeleteTransitionPte(_MMPTE *PoINTerPte, _MMPFN *Pfn1, UINT8 *PageIrql, UINT64 ReleasePageFileInfo){
INT64 v4;
INT64 v5;
INT64 v6;
INT64 v7;
INT64 v8;
__int64 v11;
UINT64 v12;
__int64 v13;
__int64 v14;
__int64 v15;
UINT64 v16;
__int64 v17;
__int64 v18;
__int64 v19;
unsigned int v20;
char *v21;
INT64 v22;
__int64 v23;
unsigned __int8 v24;
char v26;
ULONG_PTR BugCheckParameter4;
INT64 v28;
INT64 v29;
INT64 a8;
INT64 a9;
INT64 a10;
INT64 a11;
INT64 a12;
UINT64 SpinCount;
INT64 a1;
unsigned __int8 v37;
int v38;
v38 = ReleasePageFileInfo;
v37 = (unsigned __int8)PageIrql;
v11 = (unsigned __int128)((Pfn1 - MmGetPfnDb()) * (__int128)0x2AAAAAAAAAAAAAABi64) >> 64;
v12 = ((unsigned __int64)v11 >> 63) + (v11 >> 3);
if( (_MMPTE *)(*((_QWORD *)Pfn1 + 1) | 0x8000000000000000ui64) != PoINTerPte )
KeBugCheckEx(0x1Au, 0x402ui64, (ULONG_PTR)PoINTerPte, *(_QWORD *)PoINTerPte, *((_QWORD *)Pfn1 + 1));
v13 = *((_QWORD *)Pfn1 + 2);
a12 = v4;
a11 = v5;
a10 = v6;
a9 = v7;
v14 = *((_QWORD *)Pfn1 + 5) & 0xFFFFFFFFFi64;
v15 = 0i64;
a8 = v8;
a1 = 0i64;
v16 = 0i64;
if( (v13 & 0x400) != 0 )
{
if( qword_140C4DC80 && (v13 & 0x10) == 0 )
v13 &= ~qword_140C4DC80;
MiDereferenceControlAreaPfnList(*(_CONTROL_AREA **)(v13 >> 16), (_SUBSECTION *)(v13 >> 16), (UINT64)PageIrql, 2ui64);
v17 = *((_QWORD *)Pfn1 + 2);
v18 = -2049i64;
if( (v17 & 0x400) == 0 )
v18 = -9i64;
v19 = v18 & *((_QWORD *)Pfn1 + 2);
if( (v17 & 0x400) == 0 )
v19 &= 0xFFFFFFFFFFFFFFF9ui64;
}
else
{
v19 = 0i64;
}
if( *((_WORD *)Pfn1 + 16) )
{
*((_QWORD *)Pfn1 + 3) |= 0x4000000000000000ui64;
v26 = *((_BYTE *)Pfn1 + 34);
if( (v26 & 0x20) != 0 && (v26 & 8) == 0 )
{
v15 = *(_QWORD *)Pfn1 - 32i64;
if( *(_QWORD *)(v15 + 16) == v15 + 16 )
v15 = 0i64;
}
v20 = 3;
}
else
{
MiUnlinkPageFromList(Pfn1, 0i64);
if( (*((_DWORD *)Pfn1 + 4) & 0x400i64) == 0 )
{
v16 = MiCapturePageFileInfoInline((UINT64 *)Pfn1 + 2, 0i64, 1i64);
a1 = *(_QWORD *)(qword_140C4E388 + 8 * ((*((_QWORD *)Pfn1 + 5) >> 39) & 0x3FFi64));
}
v20 = 4;
}
*(_QWORD *)PoINTerPte = v19;
if( v20 == 4 )
MiInsertPageInFreeOrZeroedList(v12, 2ui64);
_InterlockedAnd64((volatile signed __int64 *)Pfn1 + 3, 0x7FFFFFFFFFFFFFFFui64);
v21 = (char *)MmGetPfnDb() + 48 * v14;
LODWORD(SpinCount) = 0;
while( _interlockedbittestandset64((volatile signed __int32 *)v21 + 6, 0x3Fui64) )
{
do
KeYieldProcessorEx(&SpinCount);
while( *((__int64 *)v21 + 3) < 0 );
}
v22 = (unsigned __int8)v21[34];
v23 = *((_QWORD *)v21 + 3) & 0x3FFFFFFFFFFFFFFFi64;
if( (v22 & 7) != 6 )
KeBugCheckEx(0x4Eu, 0x99ui64, 48 * v14 / 48, v22 & 7, *((_QWORD *)v21 + 3) & 0x3FFFFFFFFFFFFFFFi64);
*((_QWORD *)v21 + 3) ^= ((v23 - 1) ^ *((_QWORD *)v21 + 3)) & 0x3FFFFFFFFFFFFFFFi64;
if( v23 == 1 )
MiPfnShareCountIsZero((UINT64)v21, 0i64);
_InterlockedAnd64((volatile signed __int64 *)v21 + 3, 0x7FFFFFFFFFFFFFFFui64);
v24 = v37;
if( v37 != 17 )
__writecr8(v37);
if( v15 )
MiInvalidateCollidedIos(v15);
if( v16 && v38 )
MiReleasePageFileInfo(a1, v16, v24 == 17, v22, BugCheckParameter4, v28, v29, a8, a9, a10, a11, a12);
return v20;
}Referenced by:
MiDecommitPages
MiDeletePerSessionProtos
MiDeleteSubsectionPages
MiDeleteSystemPagableVm
MiPurgeFileOnlyPfn
MiTryDeleteTransitionPte
MiWalkEntireImage
MmPurgeSection