MxReleaseFreeDescriptor
VOID __stdcall MxReleaseFreeDescriptor(_MX_ALLOCATION_DESCRIPTOR *Md, _TYPE_OF_MEMORY MemoryType){
int v3;
unsigned __int64 v4;
__int64 v5;
__int64 v6;
unsigned __int64 v7;
__int64 v8;
_MEMORY_ALLOCATION_DESCRIPTOR MemoryDescriptor;
MemoryDescriptor.ListEntry.Flink = 0i64;
MemoryDescriptor.ListEntry.Blink = 0i64;
v3 = 0;
*((_DWORD *)&MemoryDescriptor.MemoryType + 1) = 0;
v4 = *(_QWORD *)Md;
v5 = *((_QWORD *)Md + 3);
MemoryDescriptor.BasePage = v4;
MemoryDescriptor.MemoryType = MemoryType;
if( v5 != -1 )
{
MemoryDescriptor.PageCount = v5 - v4 + 512;
MxCreateFreePfns(&MemoryDescriptor);
v3 = 1;
}
v6 = *((_QWORD *)Md + 2);
if( v6 != -1 )
{
v7 = *(_QWORD *)Md;
if( (v6 & 0xFFFFFFFFFFFFFE00ui64) > *(_QWORD *)Md )
v7 = v6 & 0xFFFFFFFFFFFFFE00ui64;
if( (v6 & 0xFFFFFFFFFFFFFE00ui64) <= *(_QWORD *)Md )
v3 = 1;
MemoryDescriptor.BasePage = v7;
MemoryDescriptor.PageCount = v6 - v7 + 1;
MxCreateFreePfns(&MemoryDescriptor);
if( !v3 )
{
v8 = *(_QWORD *)Md & 0x1FFi64;
if( (*(_QWORD *)Md & 0x1FF) != 0 )
{
MemoryDescriptor.BasePage = *(_QWORD *)Md;
MemoryDescriptor.PageCount = 512 - v8;
MxCreateFreePfns(&MemoryDescriptor);
}
}
}
}Referenced by:
MiCreateFreePfns