CcRemoveVacbArray
VOID __stdcall CcRemoveVacbArray(_VACB_ARRAY_HEADER *VacbArrayHeader){
unsigned int v1;
__int64 VacbArrayIndex;
unsigned int v4;
_QWORD *v5;
int v6;
unsigned int *v7;
__int64 v8;
unsigned int **v9;
v1 = 0;
if( VacbArrayHeader->MappingCount )
KeBugCheckEx(0x34u, (PVOID)0x20D, (PVOID)0xFFFFFFFFC0000420i64, 0i64, 0i64);
VacbArrayIndex = VacbArrayHeader->VacbArrayIndex;
if( *(_VACB_ARRAY_HEADER **)(*(&CmpDummyThreadEvent + 352) + 8 * VacbArrayIndex) != VacbArrayHeader )
KeBugCheckEx(0x34u, (PVOID)0x213, (PVOID)0xFFFFFFFFC0000420i64, 0i64, 0i64);
v4 = dword_140C50308;
if( (_DWORD)VacbArrayIndex == dword_140C50308 && dword_140C50308 )
{
v5 = (_QWORD *)(*(&CmpDummyThreadEvent + 352) + 8i64 * dword_140C50308);
while( !*v5 )
{
--v5;
if( !--v4 )
goto LABEL_10;
}
dword_140C50308 = v4;
}
LABEL_10:
v6 = *(&CmpDummyThreadEvent + 712);
*(_QWORD *)(*(&CmpDummyThreadEvent + 352) + 8 * VacbArrayIndex) = 0i64;
if( !v6 )
KeBugCheckEx(0x34u, (PVOID)0x22F, (PVOID)0xFFFFFFFFC0000420i64, 0i64, 0i64);
*(&CmpDummyThreadEvent + 712) = v6 - 1;
do
{
v7 = &VacbArrayHeader[2].VacbArrayIndex + 10 * v1;
v8 = *(_QWORD *)v7;
if( *(unsigned int **)(*(_QWORD *)v7 + 8i64) != v7 || (v9 = (unsigned int **)*((_QWORD *)v7 + 1), *v9 != v7) )
__fastfail(3u);
++v1;
*v9 = (unsigned int *)v8;
*(_QWORD *)(v8 + 8) = v9;
}
while( v1 < 0xCCC );
*(&CmpDummyThreadEvent + 702) -= 3276;
}Referenced by:
CcDereferenceVacbArray