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