HvAnalyzeLogFiles

__int64 __fastcall HvAnalyzeLogFiles(
        INT64 a1,
        int a2,
        char a3,
        unsigned int a4,
        INT64 a5,
        INT64 a6,
        INT64 a7,
        INT64 a8){
  unsigned int v8; 
  unsigned int v9; 
  INT64 v10; 
  unsigned int v11; 
  INT64 *v12; 
  _QWORD *v13; 
  int v14; 
  INT64 v15; 
  INT64 v16; 
  INT64 v17; 
  unsigned int v18; 
  char v19; 
  int v20; 
  unsigned int v21; 
  _HBASE_BLOCK **v22; 
  _LARGE_INTEGER *v23; 
  unsigned int *v24; 
  __int64 v25; 
  _HBASE_BLOCK *v26; 
  unsigned int Type; 
  unsigned int Length; 
  int v29; 
  unsigned int v30; 
  INT64 v31; 
  INT64 v32; 
  int v33; 
  __int64 v34; 
  _OWORD *v35; 
  _OWORD *v36; 
  __int128 v37; 
  INT64 *v38; 
  unsigned int v39; 
  INT64 v40; 
  unsigned int v41; 
  unsigned int v42; 
  _DWORD *v43; 
  bool v44; 
  unsigned int *v45; 
  unsigned int *v46; 
  unsigned int v47; 
  __int64 v48; 
  __int64(__fastcall *v49)(__int64, _QWORD, __int64, _OWORD **); 
  unsigned int v50; 
  unsigned int v51; 
  unsigned int v52; 
  _DWORD *v53; 
  __int128 v54; 
  __int64 v55; 
  int v56; 
  INT64 *v57; 
  INT64 *v58; 
  _DWORD *v59; 
  INT64 v60; 
  _DWORD *v61; 
  INT64 v62; 
  __int128 v63; 
  INT64 v64; 
  unsigned int v65; 
  __int64 v66; 
  __int64 v67; 
  __int128 v68; 
  __int64 v69; 
  __int128 v70; 
  __int64 v71; 
  INT64 v73; 
  INT64 v74; 
  INT64 v75; 
  INT64 v76; 
  INT64 v77; 
  INT64 v78; 
  INT64 v79; 
  INT64 v80[2]; 
  INT64 v81; 
  INT64 v82; 
  INT64 v83[2]; 
  __int128 v84; 
  __int128 v85; 
  _EVENT_DATA_DESCRIPTOR v86; 
  INT64 v87; 
  INT64 v88; 
  INT64 *v89; 
  INT64 v90; 
  INT64 v91; 
  _EVENT_DATA_DESCRIPTOR v92; 
  INT64 v93; 
  INT64 v94; 
  INT64 *v95; 
  INT64 v96; 
  INT64 v97; 
  INT64 v98; 
  INT64 v99; 
  INT64 v100; 
  INT64 *v101; 
  INT64 v102; 
  INT64 v103; 
  INT64 v104; 
  VOID *v105; 

  v8 = 0;
  LODWORD(v76) = a2;
  v9 = a4;
  v10 = a5;
  v77 = a1;
  v11 = 0;
  v81 = a5;
  v78 = a6;
  HIDWORD(v75) = a4;
  BYTE3(v75) = a3;
  v82 = a7;
  v79 = a8;
  *(_OWORD *)v80 = 0i64;
  *(_OWORD *)v83 = 0i64;
  v84 = 0i64;
  v85 = 0i64;
  if( a4 )
  {
    v12 = v80;
    v13 = (_QWORD *)(a5 + 16);
    do
    {
      v14 = ((__int64(__fastcall *)(_QWORD, _QWORD, __int64, INT64 *))*(v13 - 1))(*v13, 0i64, 512i64, &v80[v11]);
      v18 = v14;
      if( v14 < 0 )
      {
        HvpIsReadErrorTransient(
          (unsigned int)v14,
          v15,
          v16,
          v17,
          v73,
          v74,
          v75,
          v76,
          v77,
          v78,
          v79,
          v80[0],
          v80[1],
          v81,
          v82,
          v83[0],
          v83[1],
          v84,
          *((INT64 *)&v84 + 1),
          v85,
          *((INT64 *)&v85 + 1),
          v86.Ptr,
          *(INT64 *)&v86.Size,
          v87,
          v88,
          (INT64)v89,
          v90,
          v91,
          v92.Ptr,
          *(INT64 *)&v92.Size,
          v93,
          v94,
          (INT64)v95,
          v96,
          v97,
          v98,
          v99,
          v100,
          (INT64)v101,
          v102,
          v103,
          v104,
          v105);
        if( v19 )
          return(unsigned int)-1073741491;
        HvpLogUnreadableLog(*((unsigned int *)v13 - 4), v18);
        *v12 = 0i64;
      }
      v9 = HIDWORD(v75);
      ++v11;
      v13 += 3;
      ++v12;
    }
    while( v11 < HIDWORD(v75) );
    v10 = v81;
  }
  v20 = 0;
  if( !v9 )
    goto LABEL_61;
  v21 = v76;
  v22 = (_HBASE_BLOCK **)v80;
  v23 = (_LARGE_INTEGER *)v77;
  v24 = (unsigned int *)v10;
  v25 = v9;
  do
  {
    v26 = *v22;
    if( !*v22 )
      goto LABEL_25;
    if( v26->Signature == 1718052210
      && v26->Sequence1 == v26->Sequence2
      && v26->TimeStamp.QuadPart == v23->QuadPart
      && ((Type = v26->Type, Type == 6) || Type == 1)
      && (Length = v26->Length, Length - 1 <= 0x7FFFDFFF)
      && (Length & 0xFFF) == 0
      && (v29 = HvpHeaderCheckSum(*v22), v26->CheckSum == v29) )
    {
      if( v30 >= v21 )
      {
        ++v20;
        goto LABEL_25;
      }
      HvpLogIneligibleLogHeader(*v24, v21, v30, (UINT64)v26);
    }
    else
    {
      HvpLogInvalidLogHeader(v23, *v24, v26, v26);
    }
    *v22 = 0i64;
LABEL_25:
    v24 += 6;
    ++v22;
    --v25;
  }
  while( v25 );
  v31 = v82;
  v32 = v79;
  if( !v20 )
  {
LABEL_61:
    if( *(&stru_140C00F40 + 1148) > 5u && tlgKeywordOn((__int64)&stru_140C00F40 + 4592, 0x400000000008i64) )
    {
      v79 = 0x1000000i64;
      v89 = &v79;
      v90 = 8i64;
      tlgWriteTransfer_EtwWriteTransfer(
        (__int64)&stru_140C00F40 + 4592,
        (unsigned __int8 *)byte_140022F8F,
        0i64,
        0i64,
        3u,
        &v86);
    }
    return(unsigned int)-1073741492;
  }
  if( v79 )
  {
    if( v20 == 1 )
    {
      v33 = v80[0] == 0;
    }
    else
    {
      LODWORD(v77) = *(_DWORD *)(v80[0] + 4);
      HIDWORD(v77) = *(_DWORD *)(v80[1] + 8);
      v33 = HvpDetermineLatestLogFile((UINT64 *)&v77);
    }
    v34 = 4i64;
    v35 = (_OWORD *)v80[v33];
    v36 = (_OWORD *)v32;
    do
    {
      *v36 = *v35;
      v36[1] = v35[1];
      v36[2] = v35[2];
      v36[3] = v35[3];
      v36[4] = v35[4];
      v36[5] = v35[5];
      v36[6] = v35[6];
      v36 += 8;
      v37 = v35[7];
      v35 += 8;
      *(v36 - 1) = v37;
      --v34;
    }
    while( v34 );
    memset((VOID *)(v32 + 512), 0i64, 0xE00u);
    *(_DWORD *)(v32 + 28) = 0;
  }
  v38 = v80;
  v39 = HIDWORD(v75);
  v40 = v81 + 8;
  v41 = 0;
  v42 = 0;
  do
  {
    v43 = (_DWORD *)*v38;
    if( *v38 )
    {
      v44 = v43[7] == 6;
      v45 = (unsigned int *)&v83[3 * v41 + 1] + 1;
      v46 = (unsigned int *)&v84 + 6 * v41;
      HIDWORD(v83[3 * v41]) = *(_DWORD *)(v40 - 8);
      v47 = v43[1];
      LODWORD(v83[3 * v41 + 1]) = v47;
      LODWORD(v83[3 * v41]) = v42;
      if( v44 )
      {
        v48 = *(_QWORD *)(v40 + 8);
        *((_BYTE *)&v84 + 24 * v41 + 4) = 0;
        v49 = *(__int64(__fastcall **)(__int64, _QWORD, __int64, _OWORD **))v40;
        *v38 = 0i64;
        if( (int)HvpDetermineIncrementalLogFileMaximums(v49, v48, v45, v46) < 0 )
          return(unsigned int)-1073741491;
      }
      else
      {
        *v45 = v47;
        *v46 = v43[10];
        *((_BYTE *)&v84 + 24 * v41 + 4) = 1;
      }
      ++v41;
    }
    ++v42;
    v40 += 24i64;
    ++v38;
  }
  while( v42 < v39 );
  v50 = *(&stru_140C00F40 + 1148);
  v51 = v85;
  v52 = v83[1];
  if( *(&stru_140C00F40 + 1148) > 5u && tlgKeywordOn((__int64)&stru_140C00F40 + 4592, 8i64) )
  {
    LOBYTE(v75) = v41;
    v95 = &v75;
    BYTE1(v75) = BYTE4(v83[0]);
    v96 = 1i64;
    v97 = (INT64)&v75 + 1;
    BYTE2(v75) = BYTE12(v84);
    v99 = (INT64)&v75 + 2;
    v101 = &v76;
    v103 = (INT64)&v75 + 4;
    v98 = 1i64;
    v100 = 1i64;
    LODWORD(v76) = v52;
    v102 = 4i64;
    HIDWORD(v75) = v51;
    v104 = 4i64;
    tlgWriteTransfer_EtwWriteTransfer(
      (__int64)&stru_140C00F40 + 4592,
      (unsigned __int8 *)byte_140022EAB,
      0i64,
      0i64,
      7u,
      &v92);
    v50 = *(&stru_140C00F40 + 1148);
  }
  if( v41 == 1 )
  {
    v53 = (_DWORD *)v78;
    v54 = *(_OWORD *)v83;
    v55 = v84;
    goto LABEL_47;
  }
  if( BYTE3(v75) )
  {
    v77 = __PAIR64__(v51, v52);
    v65 = HvpDetermineLatestLogFile((UINT64 *)&v77);
    v66 = v65 == 0 ? 0x18 : 0;
    v67 = 3i64 * v65;
    v44 = *(_DWORD *)((char *)&v83[1] + v66 + 4) + 1 == LODWORD(v83[3 * v65 + 1]);
    v53 = (_DWORD *)v78;
    if( v44 )
    {
      v68 = *(_OWORD *)((char *)v83 + v66);
      *(_DWORD *)v78 = 2;
      v69 = *(_QWORD *)((char *)&v84 + v66);
      *(_OWORD *)v31 = v68;
      v70 = *(_OWORD *)&v83[v67];
      *(_QWORD *)(v31 + 16) = v69;
      v71 = *((_QWORD *)&v84 + v67);
      *(_OWORD *)(v31 + 24) = v70;
      *(_QWORD *)(v31 + 40) = v71;
    }
    else
    {
      v54 = *(_OWORD *)&v83[v67];
      v55 = *((_QWORD *)&v84 + v67);
LABEL_47:
      *v53 = 1;
      *(_OWORD *)v31 = v54;
      *(_QWORD *)(v31 + 16) = v55;
    }
  }
  else
  {
    if( v52 >= v51 )
    {
      v56 = DWORD1(v85);
      v58 = (INT64 *)&v84 + 1;
      v51 = v52;
      v57 = v83;
    }
    else
    {
      v56 = HIDWORD(v83[1]);
      v57 = (INT64 *)&v84 + 1;
      v58 = v83;
    }
    if( v56 + 1 == v51 )
    {
      v61 = (_DWORD *)v78;
      v62 = v58[2];
      *(_OWORD *)v31 = *(_OWORD *)v58;
      v63 = *(_OWORD *)v57;
      *(_QWORD *)(v31 + 16) = v62;
      v64 = v57[2];
      *(_OWORD *)(v31 + 24) = v63;
      *(_QWORD *)(v31 + 40) = v64;
      *v61 = 2;
    }
    else
    {
      if( v50 > 5 && tlgKeywordOn((__int64)&stru_140C00F40 + 4592, 0x400000000000i64) )
      {
        v79 = 0x1000000i64;
        v89 = &v79;
        v90 = 8i64;
        tlgWriteTransfer_EtwWriteTransfer(
          (__int64)&stru_140C00F40 + 4592,
          (unsigned __int8 *)byte_140022F08,
          0i64,
          0i64,
          3u,
          &v86);
      }
      v59 = (_DWORD *)v78;
      v60 = v57[2];
      *(_OWORD *)v31 = *(_OWORD *)v57;
      *(_QWORD *)(v31 + 16) = v60;
      *v59 = 1;
    }
  }
  return v8;
}

Referenced by:

No references.