CmpInitializePreloadedHives

NTSTATUS __stdcall CmpInitializePreloadedHives(_LOADER_PARAMETER_BLOCK *LoaderBlock, UINT64 Phase){
  NTSTATUS v2; 
  _QWORD **v4; 
  _QWORD *v5; 
  void *v7; 
  int v8; 
  _QWORD **v9; 
  _QWORD *v10; 
  v2 = 0;
  if( (_DWORD)Phase )
  {
    v7 = CmpHiveRootSecurityDescriptor((UINT8)LoaderBlock);
    if( v7 )
    {
      LOBYTE(v8) = CmpInitializeSystemHive(LoaderBlock);
      v2 = v8;
      if( v8 < 0 )
        KeBugCheckEx(0x67u, 1ui64, 0xCui64, v8, 0i64);
      v9 = (_QWORD **)(*((_QWORD *)LoaderBlock + 30) + 312i64);
      v10 = *v9;
      while( v10 != v9 )
      {
        CmpInitializePreloadedHive((__int64)v10, (__int64)v7);
        v10 = (_QWORD *)*v10;
        v9 = (_QWORD **)(*((_QWORD *)LoaderBlock + 30) + 312i64);
      }
      ExFreePoolWithTag(v7, 0);
    }
    else
    {
      return -1073741670;
    }
  }
  else
  {
    qword_140C48258 = (__int64)&CmpPreloadedHivesList;
    CmpPreloadedHivesList = (__int64)&CmpPreloadedHivesList;
    v4 = (_QWORD **)(*((_QWORD *)LoaderBlock + 30) + 312i64);
    v5 = *v4;
    while( v5 != v4 )
    {
      ++CmpPreloadedHivesCount;
      v5 = (_QWORD *)*v5;
      v4 = (_QWORD **)(*((_QWORD *)LoaderBlock + 30) + 312i64);
    }
  }
  return v2;
}

Referenced by:

CmInitSystem1