CcInitializeCacheManager
INT64 __fastcall CcInitializeCacheManager(BOOL IsMobileOS){
int v1;
int v2;
VOID *PoolWithTag;
CHAR *Partition;
void *v5;
int v6;
INT64 v7;
unsigned int v8;
unsigned __int64 NumberOfPhysicalPagesForPartitionObject;
unsigned __int64 v10;
int v11;
int v12;
INT64 result;
v1 = (unsigned __int8)dword_140CFA19C;
CcMasterLock = 0i64;
CcChangeSharedCacheMapFileLock = 0i64;
CcMaxNestingLevel = 2;
CcMaxAsyncReadWorkerThreads = 100;
if( (_BYTE)dword_140CFA19C )
{
v2 = 500;
}
else
{
CcMaxAsyncReadWorkerThreads = 50;
if( FsRtlIsMobileOS() )
CcMaxAsyncReadWorkerThreads = 10;
CcMaxNumberCompleteAsyncReadExWorkItems = 50;
if( !FsRtlIsMobileOS() )
goto LABEL_9;
v2 = 9;
}
CcMaxNumberCompleteAsyncReadExWorkItems = v2;
if( v1 )
{
CcMaxCachemapUninitWorkerThreads = 8;
goto LABEL_10;
}
LABEL_9:
CcMaxCachemapUninitWorkerThreads = 4;
LABEL_10:
CcDbgNumberOfFailedHighPriorityMappingsDueToMmResources = 0;
CcDbgNumberOfFailedHighPriorityMappingsDueToCcResources = 0;
PoolWithTag = ExAllocatePoolWithTag(NonPagedPoolNx, 0x2800ui64, 0x61566343ui64);
CcVacbArrays = (__int64)PoolWithTag;
if( !PoolWithTag )
KeBugCheckEx(0x34u, 0x9045Fui64, 0xFFFFFFFFC000009Aui64, 0i64, 0i64);
memset((INT64)PoolWithTag, 0i64);
qword_140C48558 = (__int64)CcVacbFreeList;
*(_QWORD *)CcVacbFreeList = CcVacbFreeList;
CcMinimumFreeHighPriorityVacbs = 128;
CcGlobalPartitionLock = 0i64;
Partition = CcCreatePartition();
if( !Partition )
KeBugCheckEx(0x34u, 0x4016Cui64, 0i64, 0i64, 0i64);
*((_QWORD *)PspSystemPartition + 1) = Partition;
CcSystemPartitionDirtyPageStatistics = (__int64)(Partition + 640);
CcSystemPartitionDirtyPageThresholds = (__int64)(Partition + 664);
CcPartitionCount = 1;
_mm_lfence();
CcInitializeBcbProfiler();
v5 = ExAllocatePoolWithTag(NonPagedPoolNx, 8ui64, 0x58637044ui64);
if( v5 )
{
ExFreeHeapPool(v5);
ExGenRandom(0i64);
__cpuid(-2147483640, 0);
}
CcBcbTrimNotificationListLock.Count = 1;
CcBcbTrimNotificationListLock.Owner = 0i64;
CcBcbTrimNotificationListLock.Contention = 0;
LOWORD(CcBcbTrimNotificationListLock.Event.Header.Lock) = 1;
CcIdleDelayTick = 0x989680 / KeMaximumIncrement;
qword_140C485B8 = (__int64)&CcVolumeCacheMapList;
CcVolumeCacheMapList = (__int64)&CcVolumeCacheMapList;
CcBcbTrimNotificationListLock.Event.Header.WaitListHead.Blink = &CcBcbTrimNotificationListLock.Event.Header.WaitListHead;
CcBcbTrimNotificationListLock.Event.Header.WaitListHead.Flink = &CcBcbTrimNotificationListLock.Event.Header.WaitListHead;
qword_140C485C8 = (__int64)&CcBcbTrimNotificationList;
CcBcbTrimNotificationList = (__int64)&CcBcbTrimNotificationList;
CcBcbTrimNotificationListLock.Event.Header.Size = 6;
CcBcbTrimNotificationListLock.Event.Header.SignalState = 0;
CcAggressiveZeroThreshold = 4;
CcMaxLazyWritePages = v1 != 0 ? 2048 : 256;
CcExtraWBThreadDelay = v1 != 0 ? 5000000 : 10000000;
if( (unsigned int)(CcMaxLazyWritePagesOverride - 1) <= 0x7FFF )
CcMaxLazyWritePages = CcMaxLazyWritePagesOverride;
v6 = 5;
CcAggressiveZeroCount = 0;
CcCoalescingFlushEvent = 1;
if( CcAzure_SoftThrottleDelayInMs )
v6 = CcAzure_SoftThrottleDelayInMs;
byte_140C48622 = 6;
CcSoftThrottleDelay = v6;
qword_140C48630 = (__int64)&qword_140C48628;
qword_140C48628 = (__int64)&qword_140C48628;
dword_140C48624 = 0;
ExInitializeSystemLookasideList(
(unsigned int)CcTwilightLookasideList,
512,
136,
1800889155,
v1 != 0 ? 256 : 128,
(__int64)&ExSystemLookasideListHead);
CcMaxWorklessLazywriteScans = 1;
v8 = 0;
for( CcMaxZeroTransferSize = v1 != 0 ? 0x2000000 : 0x100000; v8 < (unsigned int)KeNumberProcessors_0; ++v8 )
{
if( (int)CcInitializeProcessor((__int64)*(&KiProcessorBlock + v8), v7) < 0 )
KeBugCheckEx(0x34u, 0x202ui64, 0xFFFFFFFFC0000420ui64, 0i64, 0i64);
}
CcDbgNumberOfFailedWorkQueueEntryAllocations = 0;
ExInitializeNPagedLookasideListInternal((__int64)&CcBitmapLookasideList, 0i64, 0i64, 512, 1024, 1833067331, 0, 0);
CcDbgNumberOfFailedBitmapAllocations = 0;
ExInitializeNPagedLookasideListInternal((__int64)CcVacbLevelLookasideList, 0i64, 0i64, 512, 1032, 1817600835, 0, 0);
ExInitializeNPagedLookasideListInternal(
(__int64)CcVacbLevelWithBcbListHeadsLookasideList,
0i64,
0i64,
512,
2056,
1817600835,
0,
0);
CcExternalCacheListLock = 0i64;
qword_140C48658 = (__int64)&CcExternalCacheList;
CcExternalCacheList = (__int64)&CcExternalCacheList;
if( CcRemoteFileDPInlineFlushThreshold != -1 )
{
if( (unsigned int)CcRemoteFileDPInlineFlushThreshold < 0x8000
|| (NumberOfPhysicalPagesForPartitionObject = MmGetNumberOfPhysicalPagesForPartitionObject((UINT16 **)PspSystemPartition),
v10 > NumberOfPhysicalPagesForPartitionObject) )
{
CcRemoteFileDPInlineFlushThreshold = 1310720;
}
}
v11 = CcUnmapBehindLength;
if( (unsigned int)(CcUnmapBehindLength - 1) > 0x7F )
v11 = 8;
LODWORD(CcUnmapBehindLength) = v11 << 20;
if( !CcAzure_LargeWriteSize
|| (v12 = CcAzure_LargeWriteSize << 10, CcAzure_LargeWriteSize << 10 <= (unsigned int)CcAzure_LargeWriteSize) )
{
v12 = 0;
}
CcAzure_LargeWriteSize = v12;
if( (unsigned int)CcAzure_SoftThrottleLargeWriteAtPct >= 0x65 )
CcAzure_SoftThrottleLargeWriteAtPct = 0;
if( (unsigned int)CcAzure_LazyWriterPercentageOfNumProcs >= 0x65 )
CcAzure_LazyWriterPercentageOfNumProcs = 0;
qword_140C48530 = 0i64;
CcTestControlData = 0i64;
result = PoRegisterCoalescingCallback((INT64)CcCoalescingCallBack, 1, &CcCoalescingRegistration, 0i64);
if( (int)result < 0 )
KeBugCheckEx(0x34u, 0x294ui64, 0xFFFFFFFFC0000420ui64, 0i64, 0i64);
CcInitializationComplete = 1;
LOBYTE(result) = 1;
return result;
}Referenced by:
Phase1InitializationDiscard