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