CcDereferenceVacbArray
VOID __stdcall CcDereferenceVacbArray(_VACB_ARRAY_HEADER *VacbArrayHeader, UINT8 GlobalVacbLockAcquired){
KIRQL v2;
unsigned int MappingCount;
unsigned int v6;
v2 = 0;
if( !GlobalVacbLockAcquired )
v2 = KeAcquireQueuedSpinLock(4ui64);
MappingCount = VacbArrayHeader->MappingCount;
if( !MappingCount )
KeBugCheckEx(0x34u, 0x16Eui64, 0xFFFFFFFFC0000420ui64, 0i64, 0i64);
v6 = MappingCount - 1;
VacbArrayHeader->MappingCount = v6;
if( !GlobalVacbLockAcquired )
{
if( v6 )
{
KeReleaseQueuedSpinLock(4ui64, v2);
}
else
{
CcRemoveVacbArray((UINT64 *)&VacbArrayHeader->VacbArrayIndex);
KeReleaseQueuedSpinLock(4ui64, v2);
CcFreeVacbArray(VacbArrayHeader);
}
}
}Referenced by:
CcUnmapInactiveViewsInternal