CcSetVacbLargeOffset

CHAR __fastcall CcSetVacbLargeOffset(INT64 a1, INT64 a2, UINT64 a3, VACB_LEVEL_ALLOCATION_LIST *a4){
  int v6; 
  VACB_LEVEL_ALLOCATION_LIST *v7; 
  __int64 v8; 
  _QWORD *v9; 
  unsigned int v10; 
  __int64 v11; 
  int v12; 
  unsigned int v13; 
  INT64 v14; 
  __int64 v15; 
  _QWORD *VacbLevel; 
  char v17; 
  int v18; 
  _DWORD *v19; 
  _BYTE *v20; 
  VACB_LEVEL_ALLOCATION_LIST *v21; 
  _DWORD *v23; 
  INT64 v24; 
  INT64 v25; 
  INT64 v26; 
  unsigned int v27; 
  INT64 v28; 
  int v29; 
  int v30; 
  _DWORD *v31; 
  INT64 BcbListHeadLargeOffset; 
  INT64 i; 
  _QWORD *v34; 
  _QWORD *v35; 
  __int64 v36; 
  _QWORD *v37; 
  _QWORD *v38; 
  __int64 v39; 
  _QWORD *v40; 
  int v41; 
  unsigned int v42; 
  VACB_LEVEL_ALLOCATION_LIST *v43; 
  INT64 v44; 
  __int128 v45; 
  __int128 v46; 
  INT64 v47; 
  __int64 v48; 
  __int128 v49[3]; 
  __int64 v50; 
  int v51[8]; 
  v43 = a4;
  v44 = a2;
  v50 = 0i64;
  v6 = 25;
  v47 = a2;
  v7 = a4;
  LODWORD(v8) = 0;
  v9 = *(_QWORD **)(a1 + 88);
  v10 = 0;
  v11 = *(_QWORD *)(a1 + 32);
  memset(v49, 0, sizeof(v49));
  v45 = 0i64;
  v46 = 0i64;
  do
  {
    v12 = v6;
    v41 = v6;
    v6 += 7;
    ++v10;
  }
  while( v11 > 1i64 << v6 );
  do
  {
    v42 = v10;
    v13 = v10;
    v14 = a2 >> v12;
    --v10;
    if( (unsigned int)v8 >= 7 )
      return 0;
    v15 = (unsigned int)v8;
    LODWORD(v8) = v8 + 1;
    v51[v15] = v14;
    *((_QWORD *)v49 + v15) = v9;
    v48 = (unsigned int)v14;
    VacbLevel = (_QWORD *)v9[(unsigned int)v14];
    if( !VacbLevel )
    {
      v29 = *(_DWORD *)(a1 + 152) & 0x200;
      if( !v29 || (v30 = 1, v10) )
        v30 = 0;
      if( !v7 )
      {
        *(_QWORD *)&v46 = 0i64;
        *((_QWORD *)&v45 + 1) = &v45;
        DWORD2(v46) = 0;
        *(_QWORD *)&v45 = &v45;
        LOBYTE(v14) = v29 != 0;
        if( !(unsigned __int8)CcAllocateVacbLevels(v13, v14, &v45) )
          return 0;
        v7 = (VACB_LEVEL_ALLOCATION_LIST *)&v45;
        v43 = (VACB_LEVEL_ALLOCATION_LIST *)&v45;
      }
      VacbLevel = CcAllocateVacbLevel((__int64)v7, v30);
      if( v30 )
      {
        BcbListHeadLargeOffset = CcGetBcbListHeadLargeOffset(a1, v47, 0);
        for( i = *(_QWORD *)(BcbListHeadLargeOffset + 8); *(_WORD *)(i - 16) == 765; i = *(_QWORD *)(i + 8) )
          BcbListHeadLargeOffset = i;
        v34 = *(_QWORD **)(BcbListHeadLargeOffset + 8);
        v35 = VacbLevel + 128;
        *(_QWORD *)(BcbListHeadLargeOffset + 8) = VacbLevel + 128;
        v36 = 63i64;
        VacbLevel[128] = BcbListHeadLargeOffset;
        do
        {
          v37 = v35 + 2;
          v38 = v35;
          v35[1] = v35 + 2;
          v35 = v37;
          *v37 = v38;
          --v36;
        }
        while( v36 );
        v37[1] = v34;
        *v34 = v37;
      }
      v9[v48] = VacbLevel;
      v31 = (_DWORD *)VacbLevelReference(a1, (INT64)v9, v42);
      v12 = v41;
      v7 = v43;
      ++*v31;
    }
    v17 = v12;
    v12 -= 7;
    v9 = VacbLevel;
    v41 = v12;
    a2 = ((1i64 << v17) - 1) & v44;
    v44 = a2;
  }
  while( v10 );
  if( a3 >= 0xFFFFFFFFFFFFFFFEui64 )
  {
    v18 = 1;
    if( a3 == -2i64 )
      a3 = 0i64;
  }
  else
  {
    v18 = 0;
    VacbLevel[(unsigned int)(a2 >> v12)] = a3;
  }
  if( a3 )
  {
    v19 = (_DWORD *)VacbLevelReference(a1, (INT64)VacbLevel, 0i64);
    if( v18 )
      ++v19[1];
    else
      ++*v19;
  }
  else
  {
    while( 1 )
    {
      v23 = (_DWORD *)VacbLevelReference(a1, (INT64)v9, v10);
      if( v18 )
        --v23[1];
      else
        --*v23;
      v18 = a3;
      if( *(_QWORD *)VacbLevelReference(v25, v24, v26) || !(_DWORD)v8 )
        break;
      v27 = v10;
      v8 = (unsigned int)(v8 - 1);
      ++v10;
      v28 = (unsigned int)a3;
      if( !v27 && (*(_DWORD *)(a1 + 152) & 0x200) != 0 )
      {
        v39 = v9[128];
        v28 = 1i64;
        v40 = (_QWORD *)v9[255];
        *(_QWORD *)(v39 + 8) = v40;
        *v40 = v39;
      }
      CcDeallocateVacbLevel(v9, v28);
      v9 = (_QWORD *)*((_QWORD *)v49 + v8);
      v9[v51[v8]] = a3;
    }
    v21 = v43;
  }
  if( v21 == (VACB_LEVEL_ALLOCATION_LIST *)&v45 )
    CcFreeUnusedVacbLevels(v21, v20);
  return 1;
}

Referenced by:

CcAdjustVacbLevelLockCount
CcUnmapVacbArray
SetVacb