CcGetVacbFromFreeList
_LIST_ENTRY *__fastcall CcGetVacbFromFreeList(INT64 ReserveMapping){
char v1;
_LIST_ENTRY *v2;
VOID(__stdcall *v3)(PVOID, BOOL);
int *v4;
__int64 *v5;
__int64 v6;
__int64 **v7;
_LIST_ENTRY *Flink;
__int64 v9;
v2 = 0i64;
if( v1 )
{
v3 = (VOID(__stdcall *)(PVOID, BOOL))(ReserveMapping + 904);
v4 = (int *)(ReserveMapping + 920);
}
else
{
v3 = CcVacbFreeList;
v4 = &CcNumberOfFreeVacbs;
}
v5 = *(__int64 **)v3;
if( *(VOID(__stdcall **)(PVOID, BOOL))v3 != v3 )
{
v6 = *v5;
v2 = (_LIST_ENTRY *)(v5 - 2);
LODWORD(CcNumberOfMappedVacbs) = CcNumberOfMappedVacbs + 1;
if( *(__int64 **)(v6 + 8) != v5 || (v7 = (__int64 **)v5[1], *v7 != v5) )
__fastfail(3u);
*v7 = (__int64 *)v6;
*(_QWORD *)(v6 + 8) = v7;
if( !*v4 )
KeBugCheckEx(0x34u, 0x35Dui64, 0xFFFFFFFFC0000420ui64, 0i64, 0i64);
--*v4;
Flink = v2[2].Flink;
v9 = ((char *)v2 - (char *)Flink - 16) / 40;
if( (unsigned int)v9 > LODWORD(Flink->Blink) )
LODWORD(Flink->Blink) = v9;
if( !v2->Flink )
CcReferenceVacbArray((UINT64)v2[2].Flink->Flink);
v2->Blink = (_LIST_ENTRY *)-1i64;
}
return v2;
}Referenced by:
CcGetVacbMiss
CcInitializePartitionVacbs