CmpCommitAddKeyUoW

__int64 __fastcall CmpCommitAddKeyUoW(__int64 a1, __int64 *a2){
  UINT64 v2; 
  __int64 v3; 
  unsigned int v5; 
  __int64 v6; 
  UINT64 v7; 
  UINT64 v8; 
  __int64 v9; 
  unsigned int v10; 
  __int64 v11; 
  UINT64 v12; 
  __int64 v13; 
  unsigned __int16 v14; 
  unsigned int v15; 
  unsigned int v16; 
  CHAR v18; 
  UINT64 v19; 
  __int64 v20; 
  __int64 *v21; 
  __int64 v22; 
  v21 = a2;
  v2 = *(_QWORD *)(a1 + 48);
  v3 = *(int *)(a1 + 72);
  v5 = -1;
  v6 = *(_QWORD *)(v2 + 72);
  v7 = *(_QWORD *)(v2 + 32);
  v8 = *(_QWORD *)(v6 + 32);
  v22 = 0xFFFFFFFFi64;
  v20 = 0xFFFFFFFFi64;
  v9 = (*(__int64(__fastcall **)(UINT64, _QWORD, __int64 *))(v8 + 8))(
         v8,
         *(unsigned int *)(*(_QWORD *)(v2 + 72) + 40i64),
         &v22);
  if( HvMarkCellDirty(v7, *(unsigned int *)(v2 + 40), 1)
    && HvMarkCellDirty(v8, *(unsigned int *)(v6 + 40), 1)
    && HvMarkCellDirty(v8, *(unsigned int *)(v9 + 4 * v3 + 28), 1) )
  {
    LODWORD(v19) = v3;
    v10 = CmpCopyKeyPartial(v7, *(unsigned int *)(v2 + 40), v8, *(unsigned int *)(v6 + 40), 38, v18, v19);
    v5 = v10;
    if( v10 == -1 || !CmpAddSubKey(v8, *(unsigned int *)(v6 + 40), v10) )
    {
      v16 = -1073741670;
    }
    else
    {
      *(_DWORD *)(a1 + 88) = *(_DWORD *)(v2 + 40);
      *(_DWORD *)(v2 + 40) = v5;
      v11 = (*(__int64(__fastcall **)(UINT64, _QWORD, __int64 *))(v7 + 8))(v7, v5, &v20);
      v12 = *(unsigned int *)(v11 + 44);
      *(_DWORD *)(v11 + 16) = *(_DWORD *)(v6 + 40);
      CmpAssignSecurityToKcb(v2, v12, 0i64, 0, 0);
      ++*(_QWORD *)(v2 + 304);
      ++*(_QWORD *)(v6 + 304);
      v13 = *v21;
      *(_QWORD *)(v9 + 4) = *v21;
      *(_QWORD *)(v6 + 168) = v13;
      v14 = 2 * *(_WORD *)(v11 + 72);
      if( (*(_BYTE *)(v11 + 2) & 0x20) == 0 )
        v14 = *(_WORD *)(v11 + 72);
      if( (unsigned __int16)*(_DWORD *)(v9 + 52) < (unsigned int)v14 )
      {
        *(_WORD *)(v9 + 52) = v14;
        *(_WORD *)(v6 + 176) = v14;
      }
      v15 = *(unsigned __int16 *)(v11 + 74);
      if( *(_DWORD *)(v9 + 56) < v15 )
        *(_DWORD *)(v9 + 56) = v15;
      v5 = -1;
      v16 = 0;
      (*(void(__fastcall **)(UINT64, __int64 *))(v7 + 16))(v7, &v20);
    }
  }
  else
  {
    v16 = -1073741443;
  }
  if( v9 )
    (*(void(__fastcall **)(UINT64, __int64 *))(v8 + 16))(v8, &v22);
  if( v5 != -1 )
    CmpFreeKeyByCell((_HHIVE *)v7, v5, 0);
  return v16;
}

Referenced by:

CmpTransMgrCommitUoW