CmpOKToFollowLink

UINT8 __stdcall CmpOKToFollowLink(CMHIVE *OrigHive, CMHIVE *DestHive){
  CMHIVE *Flink; 
  __int64 v5; 
  unsigned int v6; 
  __int64 v8; 
  _EVENT_DATA_DESCRIPTOR v9; 
  __int64 *v10; 
  __int64 v11; 

  if( !OrigHive || OrigHive == DestHive )
    return 1;
  if( (DestHive->Flags & 1) != 0 )
  {
    ExAcquirePushLockSharedEx((_EX_PUSH_LOCK *)&CmpDummyThreadEvent + 340, 0i64);
    Flink = (CMHIVE *)DestHive->TrustClassEntry.Flink;
    if( Flink != (CMHIVE *)&DestHive->TrustClassEntry )
    {
      while( &Flink[-1].Hive.Storage[0].FreeDisplay[15].Display.Buffer != (unsigned int **)OrigHive )
      {
        Flink = *(CMHIVE **)&Flink->Hive.Signature;
        if( Flink == (CMHIVE *)&DestHive->TrustClassEntry )
          goto LABEL_7;
      }
      ExReleasePushLockEx((ULONG_PTR)&CmpDummyThreadEvent + 2720, 0);
      return 1;
    }
LABEL_7:
    ExReleasePushLockEx((ULONG_PTR)&CmpDummyThreadEvent + 2720, 0);
  }
  if( PsIsCurrentThreadInServerSilo() && *(&stru_140C00F40 + 1148) > 5u )
  {
    if( tlgKeywordOn((__int64)&stru_140C00F40 + 4592, 0x200000010000i64) )
    {
      v8 = 0x1000000i64;
      v10 = &v8;
      v11 = 8i64;
      tlgWriteAgg((__int64)&stru_140C00F40 + 4592, (unsigned __int8 *)&word_140021C46, v5, 3u, &v9);
      v6 = *(&stru_140C00F40 + 1148);
    }
    if( v6 > 5 )
    {
      if( tlgKeywordOn((__int64)&stru_140C00F40 + 4592, 0i64) )
        tlgWriteTransfer_EtwWriteTransfer(
          (__int64)&stru_140C00F40 + 4592,
          (unsigned __int8 *)&byte_140021C0F,
          0i64,
          0i64,
          2u,
          &v9);
    }
  }
  return 0;
}

Referenced by:

CmpDoParseKey