CcUninitializeVolumeCacheMap

VOID __stdcall CcUninitializeVolumeCacheMap(_VOLUME_CACHE_MAP *VolumeCacheMap){
  int v2; 
  unsigned int UseCount; 
  unsigned int v4; 
  _LIST_ENTRY *Flink; 
  _LIST_ENTRY *Blink; 
  _FILE_OBJECT *RelatedFileObject; 
  _KLOCK_QUEUE_HANDLE LockHandle; 

  memset(&LockHandle, 0, sizeof(LockHandle));
  v2 = 0;
  KeAcquireInStackQueuedSpinLock((PKSPIN_LOCK)&WheapErrorSourceTable + 189, &LockHandle);
  UseCount = VolumeCacheMap->UseCount;
  if( !UseCount )
    KeBugCheckEx(0x34u, (PVOID)0x599, (PVOID)0xFFFFFFFFC0000420i64, 0i64, 0i64);
  v4 = UseCount - 1;
  VolumeCacheMap->UseCount = v4;
  if( !v4 )
  {
    v2 = 1;
    Flink = VolumeCacheMap->VolumeCacheMapLinks.Flink;
    Blink = VolumeCacheMap->VolumeCacheMapLinks.Blink;
    if( Flink->Blink != &VolumeCacheMap->VolumeCacheMapLinks || Blink->Flink != &VolumeCacheMap->VolumeCacheMapLinks )
      __fastfail(3u);
    Blink->Flink = Flink;
    Flink->Blink = Blink;
    RelatedFileObject = VolumeCacheMap->LogHandleContext.RelatedFileObject;
    if( RelatedFileObject )
    {
      HalPutDmaAdapter((PADAPTER_OBJECT)RelatedFileObject);
      VolumeCacheMap->LogHandleContext.RelatedFileObject = 0i64;
    }
  }
  KeReleaseInStackQueuedSpinLockFromDpcLevel(&LockHandle);
  __writecr8(LockHandle.OldIrql);
  if( v2 )
    ExFreePoolWithTag(VolumeCacheMap, 0x6D566343u);
}

Referenced by:

CcDeleteSharedCacheMap