CcDeleteMbcb
VOID __stdcall CcDeleteMbcb(
SINGLE_LIST_ENTRY *PropagateBoostsList,
SINGLE_LIST_ENTRY *SelfBoostsList,
SINGLE_LIST_ENTRY *ReadyList){
INT64 Partition;
_SINGLE_LIST_ENTRY *Next;
_SINGLE_LIST_ENTRY *v6;
_SINGLE_LIST_ENTRY *v7;
_SINGLE_LIST_ENTRY *v8;
_SINGLE_LIST_ENTRY *v9;
_SINGLE_LIST_ENTRY *v10;
PVOID *v11;
PVOID v12;
PVOID *v13;
PVOID P;
PVOID *p_P;
struct _KLOCK_QUEUE_HANDLE LockHandle;
p_P = &P;
P = &P;
memset(&LockHandle, 0, sizeof(LockHandle));
Partition = CcGetPartition(PropagateBoostsList);
ExAcquireFastMutex((FAST_MUTEX *)&PropagateBoostsList[35]);
Next = PropagateBoostsList[20].Next;
if( Next )
{
KeAcquireInStackQueuedSpinLock((UINT64 *)(Partition + 128), &LockHandle);
CcDeductDirtyPages((INT64)PropagateBoostsList, LODWORD(Next[1].Next));
KeReleaseInStackQueuedSpinLockFromDpcLevel(&LockHandle);
__writecr8(LockHandle.OldIrql);
v6 = Next + 2;
while( 1 )
{
v7 = v6->Next;
if( v6->Next == v6 )
break;
v8 = v7->Next;
v9 = v7[1].Next;
if( v7->Next[1].Next != v7 || v9->Next != v7 )
LABEL_19:
__fastfail(3u);
v9->Next = v8;
v8[1].Next = v9;
v10 = v7[5].Next;
if( v10 && v10 != &Next[12] )
ExFreeToNPagedLookasideList((NPAGED_LOOKASIDE_LIST *)&CcBitmapLookasideList, v10);
if( v7 < Next || v7 >= &Next[24] )
{
v11 = p_P;
if( *p_P != &P )
goto LABEL_19;
v7[1].Next = (_SINGLE_LIST_ENTRY *)p_P;
v7->Next = (_SINGLE_LIST_ENTRY *)&P;
*v11 = v7;
p_P = (PVOID *)&v7->Next;
}
}
PropagateBoostsList[20].Next = 0i64;
KeReleaseGuardedMutex((_FAST_MUTEX *)&PropagateBoostsList[35]);
while( 1 )
{
v12 = P;
if( P == &P )
break;
v13 = *(PVOID **)P;
if( *((PVOID **)P + 1) != &P || v13[1] != P )
goto LABEL_19;
P = *(PVOID *)P;
v13[1] = &P;
ExFreePoolWithTag(v12, 0);
}
CcDeallocateBcb((CHAR *)Next);
}
else
{
KeReleaseGuardedMutex((_FAST_MUTEX *)&PropagateBoostsList[35]);
}
}Referenced by:
CcDeleteSharedCacheMap
CcSetFileSizesEx