CcGetVacbFromFreeList

_LIST_ENTRY *__fastcall CcGetVacbFromFreeList(INT64 ReserveMapping){
  char v1; 
  _LIST_ENTRY *v2; 
  VOID(__stdcall *v3)(PVOID, BOOL); 
  int *v4; 
  __int64 *v5; 
  __int64 v6; 
  __int64 **v7; 
  _LIST_ENTRY *Flink; 
  __int64 v9; 
  v2 = 0i64;
  if( v1 )
  {
    v3 = (VOID(__stdcall *)(PVOID, BOOL))(ReserveMapping + 904);
    v4 = (int *)(ReserveMapping + 920);
  }
  else
  {
    v3 = CcVacbFreeList;
    v4 = &CcNumberOfFreeVacbs;
  }
  v5 = *(__int64 **)v3;
  if( *(VOID(__stdcall **)(PVOID, BOOL))v3 != v3 )
  {
    v6 = *v5;
    v2 = (_LIST_ENTRY *)(v5 - 2);
    LODWORD(CcNumberOfMappedVacbs) = CcNumberOfMappedVacbs + 1;
    if( *(__int64 **)(v6 + 8) != v5 || (v7 = (__int64 **)v5[1], *v7 != v5) )
      __fastfail(3u);
    *v7 = (__int64 *)v6;
    *(_QWORD *)(v6 + 8) = v7;
    if( !*v4 )
      KeBugCheckEx(0x34u, 0x35Dui64, 0xFFFFFFFFC0000420ui64, 0i64, 0i64);
    --*v4;
    Flink = v2[2].Flink;
    v9 = ((char *)v2 - (char *)Flink - 16) / 40;
    if( (unsigned int)v9 > LODWORD(Flink->Blink) )
      LODWORD(Flink->Blink) = v9;
    if( !v2->Flink )
      CcReferenceVacbArray((UINT64)v2[2].Flink->Flink);
    v2->Blink = (_LIST_ENTRY *)-1i64;
  }
  return v2;
}

Referenced by:

CcGetVacbMiss
CcInitializePartitionVacbs