SmArrayGrow

UINT64 __stdcall SmArrayGrow(UINT64 DesiredIndex, UINT64 EntrySize, UINT64 *EntryCountMax, PVOID *Array){
  unsigned int v6; 
  unsigned __int64 v7; 
  UINT8 *PoolWithTag; 
  UINT8 *v9; 
  UINT64 v10; 
  if( (unsigned int)DesiredIndex < *(_DWORD *)EntryCountMax )
    return 1i64;
  v6 = 2 * *(_DWORD *)EntryCountMax;
  if( v6 < 8 )
    v6 = 8;
  if( (unsigned int)DesiredIndex < v6 || (v6 = DesiredIndex + 8, (int)DesiredIndex + 8 >= (unsigned int)DesiredIndex) )
  {
    v7 = 16i64 * v6;
    if( v7 <= 0xFFFFFFFF )
    {
      PoolWithTag = (UINT8 *)ExAllocatePoolWithTag(NonPagedPoolNx, (unsigned int)v7, 0x72416D73ui64);
      v9 = PoolWithTag;
      if( PoolWithTag )
      {
        v10 = (unsigned int)(16 * *(_DWORD *)EntryCountMax);
        memset((INT64)&PoolWithTag[v10], 0i64);
        if( (_DWORD)v10 )
        {
          memmove(v9, (UINT8 *)*Array, v10);
          ExFreePoolWithTag(*Array, 0);
        }
        *Array = v9;
        *(_DWORD *)EntryCountMax = v6;
        return 1i64;
      }
    }
  }
  return 0i64;
}

Referenced by:

B_TREE<_SM_PAGE_KEY,SMKM_STORE_MGR::SMKM_FRONTEND_ENTRY,4096,B_TREE_DUMMY_NODE_POOL,B_TREE_KEY_COMPARATOR<_SM_PAGE_KEY>>::BTreeInsertEx
B_TREE<_SM_PAGE_KEY,SMKM_STORE_MGR::SMKM_FRONTEND_ENTRY,4096,B_TREE_DUMMY_NODE_POOL,B_TREE_KEY_COMPARATOR<_SM_PAGE_KEY>>::BTreeSearchKey
B_TREE<_SM_PAGE_KEY,ST_STORE::_ST_PAGE_ENTRY,4096,NP_CONTEXT,B_TREE_KEY_COMPARATOR<_SM_PAGE_KEY>>::BTreeInsertEx
B_TREE<_SM_PAGE_KEY,ST_STORE::_ST_PAGE_ENTRY,4096,NP_CONTEXT,B_TREE_KEY_COMPARATOR<_SM_PAGE_KEY>>::BTreeSearchKey
SMKM_STORE::SmStOutSwapStore
SmKmStoreFileGetExtents
long,ST_STORE::_ST_HASH_ENTRY,4096,NP_CONTEXT,ST_STORE::ST_HASH_ENTRY_COMPARATOR>::BTreeInsertEx
long,ST_STORE::_ST_HASH_ENTRY,4096,NP_CONTEXT,ST_STORE::ST_HASH_ENTRY_COMPARATOR>::BTreeSearchKey
long,ST_STORE::_ST_REGION_ENTRY,4096,NP_CONTEXT,ST_STORE::ST_REGION_ENTRY_COMPARATOR>::BTreeInsertEx
long,ST_STORE::_ST_REGION_ENTRY,4096,NP_CONTEXT,ST_STORE::ST_REGION_ENTRY_COMPARATOR>::BTreeSearchKey