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