CmpInitializePreloadedHives

NTSTATUS __stdcall CmpInitializePreloadedHives(_LOADER_PARAMETER_BLOCK *LoaderBlock, UINT64 Phase){
  NTSTATUS v2; 
  _LIST_ENTRY *v4; 
  _LIST_ENTRY *v5; 
  CHAR *v7; 
  int v8; 
  _LIST_ENTRY *p_AttachedHives; 
  _LIST_ENTRY *Flink; 

  v2 = 0;
  if( (_DWORD)Phase )
  {
    v7 = CmpHiveRootSecurityDescriptor((UINT8)LoaderBlock);
    if( v7 )
    {
      LOBYTE(v8) = CmpInitializeSystemHive(LoaderBlock);
      v2 = v8;
      if( v8 < 0 )
        KeBugCheckEx(0x67u, (PVOID)1, (PVOID)0xC, (PVOID)v8, 0i64);
      p_AttachedHives = &LoaderBlock->Extension->AttachedHives;
      Flink = p_AttachedHives->Flink;
      while( Flink != p_AttachedHives )
      {
        CmpInitializePreloadedHive((INT64)Flink, (INT64)v7);
        Flink = Flink->Flink;
        p_AttachedHives = &LoaderBlock->Extension->AttachedHives;
      }
      ExFreePoolWithTag(v7, 0);
    }
    else
    {
      return -1073741670;
    }
  }
  else
  {
    *(&CmpDummyThreadEvent + 259) = (char *)&CmpDummyThreadEvent + 2064;
    *(&CmpDummyThreadEvent + 258) = (char *)&CmpDummyThreadEvent + 2064;
    v4 = &LoaderBlock->Extension->AttachedHives;
    v5 = v4->Flink;
    while( v5 != v4 )
    {
      ++CmpPreloadedHivesCount;
      v5 = v5->Flink;
      v4 = &LoaderBlock->Extension->AttachedHives;
    }
  }
  return v2;
}

Referenced by:

CmInitSystem1