MiDecrementAweMapCount
NTSTATUS __stdcall MiDecrementAweMapCount(VOID *CommitBase, UINT64 CommitSize, UINT64 ReserveSize){
char v3;
char v4;
UINT8 v7;
__int64 v8;
unsigned __int64 v9;
__int64 v10;
__int64 v11;
char v12;
v4 = v3;
v7 = MiLockPageInline((_MMPFN *)CommitSize);
v8 = *(_QWORD *)(CommitSize + 24);
v9 = v7;
v10 = (v8 & 0x3FFFFFFFFFFFFFFFi64) - 1;
v11 = v8 ^ (v10 ^ v8) & 0x3FFFFFFFFFFFFFFFi64;
*(_QWORD *)(CommitSize + 24) = v11;
if( (v4 & 1) != 0 )
{
*(_QWORD *)(CommitSize + 24) = v11 | 0x4000000000000000i64;
}
else if( (v8 & 0x3FFFFFFFFFFFFFFFi64) == 1 )
{
v12 = *(_BYTE *)(CommitSize + 34);
if( (v12 & 8) != 0 )
{
LODWORD(v10) = 1;
}
else
{
*(_BYTE *)(CommitSize + 34) = v12 | 8;
*(_QWORD *)(CommitSize + 16) = *(_QWORD *)ReserveSize;
*(_QWORD *)ReserveSize = CommitSize;
}
}
_InterlockedAnd64((volatile signed __int64 *)(CommitSize + 24), 0x7FFFFFFFFFFFFFFFui64);
__writecr8(v9);
return v10;
}Referenced by:
MiFreePhysicalPages
MiReferenceIncomingPhysicalPages
MiWriteAwePtes