CcInitializePartitionVacbs
CHAR __fastcall CcInitializePartitionVacbs(INT64 ReserveMapping){
CHAR v1;
KIRQL v3;
_LIST_ENTRY *VacbFromFreeList;
_LIST_ENTRY *v5;
UINT8 v6;
KIRQL v7;
_DWORD *v8;
_DWORD *v9;
UINT8 v10;
KIRQL v12;
v1 = 1;
while( *(_DWORD *)(ReserveMapping + 920) < (unsigned int)CcMinimumFreeHighPriorityVacbs )
{
v3 = KeAcquireQueuedSpinLock(4ui64);
VacbFromFreeList = CcGetVacbFromFreeList(ReserveMapping);
KeReleaseQueuedSpinLock(4ui64, v3);
if( VacbFromFreeList )
{
v5 = (_LIST_ENTRY *)MmReserveViewInSystemCache();
VacbFromFreeList->Flink = v5;
if( !v5 )
{
v1 = 0;
v12 = KeAcquireQueuedSpinLock(4ui64);
CcSetVacbInFreeList(ReserveMapping, VacbFromFreeList, 0);
KeReleaseQueuedSpinLock(4ui64, v12);
return v1;
}
v6 = KeAcquireQueuedSpinLock(4ui64);
CcSetVacbInFreeList(ReserveMapping, VacbFromFreeList, 1);
v7 = v6;
}
else
{
CcAllocateInitializeVacbArray();
v9 = v8;
if( !v8 )
return 0;
v10 = KeAcquireQueuedSpinLock(4ui64);
CcInsertVacbArray(ReserveMapping, v9);
if( CcVacbArraysAllocated == 1 )
v9[1] = 1;
v7 = v10;
}
KeReleaseQueuedSpinLock(4ui64, v7);
}
return v1;
}Referenced by:
CcInitializePartition