CcSetVacbInFreeList

VOID __stdcall CcSetVacbInFreeList(_VACB *Vacb, UINT8 ReserveMapping){
  char v2; 
  _LIST_ENTRY *v3; 
  __int64 v4; 
  __int64 v5; 
  int v6; 
  _LIST_ENTRY **p_Blink; 
  _LIST_ENTRY *Blink; 

  LODWORD(CcNumberOfMappedVacbs) = CcNumberOfMappedVacbs - 1;
  v3 = (_LIST_ENTRY *)(ReserveMapping + 16i64);
  if( v2 )
  {
    p_Blink = &Vacb[22].Overlay.Links.Blink;
    Blink = Vacb[22].Overlay.Links.Blink;
    if( (_LIST_ENTRY **)Blink->Blink == &Vacb[22].Overlay.Links.Blink )
    {
      v3->Flink = Blink;
      *(_QWORD *)(ReserveMapping + 24i64) = p_Blink;
      Blink->Blink = v3;
      *p_Blink = v3;
      *(_QWORD *)(ReserveMapping + 8i64) = 0i64;
      ++LODWORD(Vacb[23].BaseAddress);
      return;
    }
LABEL_7:
    __fastfail(3u);
  }
  v4 = *(&CmpDummyThreadEvent + 354);
  if( *(_UNKNOWN **)(*(&CmpDummyThreadEvent + 354) + 8i64) != (_UNKNOWN *)((char *)&CmpDummyThreadEvent + 2832) )
    goto LABEL_7;
  v3->Flink = (_LIST_ENTRY *)*(&CmpDummyThreadEvent + 354);
  *(_QWORD *)(ReserveMapping + 24i64) = (char *)&CmpDummyThreadEvent + 2832;
  *(_QWORD *)(v4 + 8) = v3;
  *(&CmpDummyThreadEvent + 354) = ReserveMapping + 16i64;
  v5 = *(_QWORD *)(ReserveMapping + 32i64);
  *(_QWORD *)(ReserveMapping + 8i64) = 0i64;
  v6 = *(_DWORD *)(v5 + 4);
  if( !v6 )
    KeBugCheckEx(0x34u, (PVOID)0x16E, (PVOID)0xFFFFFFFFC0000420i64, 0i64, 0i64);
  *(_DWORD *)(v5 + 4) = v6 - 1;
  ++*(&CmpDummyThreadEvent + 702);
}

Referenced by:

CcGetVacbMiss
CcInitializePartitionVacbs
CcUninitializePartitionVacbs
CcUnmapInactiveViewsInternal
CcUnmapVacbArray