CcRemoveVacbArray
UINT64 *__fastcall CcRemoveVacbArray(UINT64 *a1){
unsigned int v1;
__int64 v3;
int v4;
_QWORD *v5;
int v6;
UINT64 *result;
UINT64 v8;
UINT64 **v9;
v1 = 0;
if( *((_DWORD *)a1 + 1) )
KeBugCheckEx(0x34u, 0x20Dui64, 0xFFFFFFFFC0000420ui64, 0i64, 0i64);
v3 = *(unsigned int *)a1;
if( *(UINT64 **)(CcVacbArrays + 8 * v3) != a1 )
KeBugCheckEx(0x34u, 0x213ui64, 0xFFFFFFFFC0000420ui64, 0i64, 0i64);
v4 = CcVacbArraysHighestUsedIndex;
if( (_DWORD)v3 == CcVacbArraysHighestUsedIndex && CcVacbArraysHighestUsedIndex )
{
v5 = (_QWORD *)(CcVacbArrays + 8i64 * (unsigned int)CcVacbArraysHighestUsedIndex);
while( !*v5 )
{
--v5;
if( !--v4 )
goto LABEL_10;
}
CcVacbArraysHighestUsedIndex = v4;
}
LABEL_10:
v6 = CcVacbArraysAllocated;
*(_QWORD *)(CcVacbArrays + 8 * v3) = 0i64;
if( !v6 )
KeBugCheckEx(0x34u, 0x22Fui64, 0xFFFFFFFFC0000420ui64, 0i64, 0i64);
CcVacbArraysAllocated = v6 - 1;
do
{
result = &a1[5 * v1 + 4];
v8 = *result;
if( *(UINT64 **)(*result + 8) != result || (v9 = (UINT64 **)result[1], *v9 != result) )
__fastfail(3u);
++v1;
*v9 = (UINT64 *)v8;
*(_QWORD *)(v8 + 8) = v9;
}
while( v1 < 0xCCC );
CcNumberOfFreeVacbs -= 3276;
return result;
}Referenced by:
CcDereferenceVacbArray