MmFreeSecureKernelPages
NTSTATUS __stdcall MmFreeSecureKernelPages(PMDL MemoryDescriptorList){
int v1;
int v2;
PMDL v3;
UINT64 *v4;
unsigned __int64 v5;
UINT64 v6;
unsigned int v7;
_MMPFN *v8;
int v9;
unsigned __int64 v10;
__int64 v11;
unsigned int v12;
_BYTE MemoryDescriptorLista[176];
v2 = v1;
v3 = MemoryDescriptorList;
memset(MemoryDescriptorLista, 0i64, sizeof(MemoryDescriptorLista));
v4 = (UINT64 *)&v3[1];
v5 = (unsigned __int64)&v3[1] + 8 * ((unsigned __int64)v3->ByteCount >> 12);
LODWORD(v6) = *(_DWORD *)(*(_QWORD *)(*(&stru_140C4DB30 + 267)
+ 8
* (((unsigned __int64)MmGetPfnDb()[(__int64)v3[1].Next].u4._bf_0 >> 39) & 0x3FF))
+ 4i64);
if( (v6 & 8) != 0 )
{
v7 = 0;
if( (unsigned __int64)v4 < v5 )
{
do
{
v8 = &MmGetPfnDb()[*v4];
LOBYTE(v9) = MiIsPfnFromSlabAllocation((INT64)v8);
if( v9 )
{
if( !v2 )
{
v10 = MiLockPageInline(v8);
v8->u4._bf_0 &= 0x8FFFFFFFFFFFFFFFui64;
_InterlockedAnd64(&v8->u2.Lock, 0x7FFFFFFFFFFFFFFFui64);
__writecr8(v10);
}
_InterlockedDecrement64((_QWORD *)&stru_140C4DB30 + 66);
LODWORD(v6) = MiFreeSmallPageFromMdl(*v4, 0i64);
}
else
{
v6 = *v4;
v11 = v7++;
*(_QWORD *)&MemoryDescriptorLista[8 * v11 + 48] = *v4;
if( v7 == 16 )
{
*(_QWORD *)MemoryDescriptorLista = 0i64;
*(_DWORD *)&MemoryDescriptorLista[8] = 131248;
*(_QWORD *)&MemoryDescriptorLista[32] = 0i64;
*(_QWORD *)&MemoryDescriptorLista[40] = 0x10000i64;
LODWORD(v6) = (unsigned int)MmFreePagesFromMdl((PMDL)MemoryDescriptorLista);
v7 = 0;
}
}
++v4;
}
while( (unsigned __int64)v4 < v5 );
v3 = MemoryDescriptorList;
if( v7 )
{
v12 = v7 << 12;
*(_QWORD *)MemoryDescriptorLista = 0i64;
*(_QWORD *)&MemoryDescriptorLista[32] = 0i64;
*(_WORD *)&MemoryDescriptorLista[8] = 8 * ((v12 >> 12) + 6);
*(_WORD *)&MemoryDescriptorLista[10] = 2;
*(_DWORD *)&MemoryDescriptorLista[44] = 0;
*(_DWORD *)&MemoryDescriptorLista[40] = v12;
LODWORD(v6) = (unsigned int)MmFreePagesFromMdl((PMDL)MemoryDescriptorLista);
}
}
v3->MdlFlags &= ~2u;
}
else
{
LODWORD(v6) = (unsigned int)MmFreePagesFromMdl(v3);
}
return v6;
}Referenced by:
MmAllocateSecureKernelPages
PspIumAllocatePhysicalPages
PspIumFreePartitionState
PspIumFreePhysicalPages