ExExtendZone
NTSTATUS __stdcall ExExtendZone(ZONE_HEADER *Zone, PVOID Segment, UINT64 SegmentSize){
_SINGLE_LIST_ENTRY *v4;
unsigned int v5;
unsigned int v6;
__int64 BlockSize;
if( ((unsigned __int8)Segment & 7) != 0 || (SegmentSize & 7) != 0 || Zone->BlockSize > (unsigned int)SegmentSize )
return -1073741823;
v4 = (_SINGLE_LIST_ENTRY *)((char *)Segment + 16);
*(_QWORD *)Segment = Zone->SegmentList.Next;
v5 = SegmentSize - Zone->BlockSize;
Zone->SegmentList.Next = (_SINGLE_LIST_ENTRY *)Segment;
v6 = 16;
if( v5 >= 0x10 )
{
do
{
v4->Next = (_SINGLE_LIST_ENTRY *)Zone->FreeList;
BlockSize = Zone->BlockSize;
Zone->FreeList.Next = v4;
v6 += BlockSize;
v4 = (_SINGLE_LIST_ENTRY *)((char *)v4 + BlockSize);
}
while( v6 <= (int)SegmentSize - (int)BlockSize );
}
Zone->TotalSegmentSize += v6;
return 0;
}Referenced by:
ExInterlockedExtendZone