MmGetControlAreaPartition
UINT64 __fastcall MmGetControlAreaPartition(INT64 a1){
UINT64 *v1;
unsigned __int8 CurrentIrql;
signed __int32 v4;
ULONG_PTR *v5;
bool v7;
signed __int32 v8;
UINT64 SpinCount;
CurrentIrql = KeGetCurrentIrql();
__writecr8(2ui64);
LODWORD(SpinCount) = 0;
if( _interlockedbittestandset(&dword_140C4C6C0, 0x1Fu) )
LODWORD(SpinCount) = ExpWaitForSpinLockExclusiveAndAcquire((RTL_BITMAP *)&dword_140C4C6C0, CurrentIrql, v1);
v4 = dword_140C4C6C0;
while( (v4 & 0xBFFFFFFF) != 0x80000000 )
{
if( (v4 & 0x40000000) == 0 )
{
v8 = _InterlockedCompareExchange(&dword_140C4C6C0, v4 | 0x40000000, v4);
v7 = v4 == v8;
v4 = v8;
if( !v7 )
continue;
}
KeYieldProcessorEx(&SpinCount);
v4 = dword_140C4C6C0;
}
if( *(_QWORD *)a1 )
v5 = *(ULONG_PTR **)(qword_140C4E388 + 8i64 * (*(_WORD *)(*(_QWORD *)a1 + 60i64) & 0x3FF));
else
v5 = &MiSystemPartition;
dword_140C4C6C0 = 0;
__writecr8(CurrentIrql);
return v5[22];
}Referenced by:
CcChargeDirtyPages
CcDeleteSectionsForPartition
CcGetFlushedValidData
CcMapAndCopyInToCache
CcNotifyOfMappedWriteComplete
CcPurgeCacheSection
CcSetDirtyInMask