ST_STORE::StDmpSinglePageInsert

__int64 __fastcall ST_STORE::StDmpSinglePageInsert(__int64 a1, _BYTE *a2, unsigned __int64 a3){
  unsigned int v3; 
  __int64 v4; 
  int v7; 
  int v9; 
  int v10; 
  int v11; 
  int v12; 
  int v13; 
  unsigned int v14; 
  unsigned int v15; 
  int v16; 
  int v17; 
  UINT64 *v18; 
  int v20; 
  int v21; 
  UINT64 StoreId; 
  unsigned int v23; 
  _BYTE *v24; 
  unsigned int v25; 
  __int64 StoreKey; 
  v24 = a2;
  v3 = 0;
  v4 = a1 + 24;
  v7 = *(_DWORD *)(a1 + 56);
  if( (v7 & 1) != 0 )
  {
    B_TREE<_SM_PAGE_KEY,ST_STORE::_ST_PAGE_ENTRY,4096,NP_CONTEXT,B_TREE_KEY_COMPARATOR<_SM_PAGE_KEY>>::BTreeSearchResultDeref(
      (__int64 *)a1,
      v4);
    v7 = *(_DWORD *)(v4 + 32);
  }
  *(_DWORD *)(v4 + 32) = v7 & 0xFFFFFFFE;
  v9 = *(_DWORD *)(a1 + 120);
  if( (*(_BYTE *)(a1 + 120) & 1) != 0 )
  {
    B_TREE::_ST_REGION_ENTRY,4096,NP_CONTEXT,ST_STORE::ST_REGION_ENTRY_COMPARATOR>::BTreeSearchResultDeref(
      (__int64 *)(a1 + 64),
      a1 + 88);
    v9 = *(_DWORD *)(a1 + 120);
  }
  *(_DWORD *)(a1 + 120) = v9 & 0xFFFFFFFE;
  v10 = *(_DWORD *)(a1 + 184);
  if( (*(_BYTE *)(a1 + 184) & 1) != 0 )
  {
    B_TREE::_ST_HASH_ENTRY,4096,NP_CONTEXT,ST_STORE::ST_HASH_ENTRY_COMPARATOR>::BTreeSearchResultDeref(
      (__int64 *)(a1 + 128),
      a1 + 152);
    v10 = *(_DWORD *)(a1 + 184);
  }
  StoreKey = 0i64;
  *(_DWORD *)(a1 + 184) = v10 & 0xFFFFFFFE;
  v11 = ((unsigned int)a3 - ((a3 & 0xFFFFF000) + *(_DWORD *)(a1 + 472))) / *(_DWORD *)(a1 + 464);
  v12 = *(_DWORD *)((a3 & 0xFFFFFFFFFFFFF000ui64) + 0x10) << *(_DWORD *)(a1 + 456);
  LODWORD(StoreKey) = *((_DWORD *)a2 + 4);
  v23 = v11 + v12;
  HIDWORD(StoreKey) = v11 + v12;
  B_TREE<_SM_PAGE_KEY,ST_STORE::_ST_PAGE_ENTRY,4096,NP_CONTEXT,B_TREE_KEY_COMPARATOR<_SM_PAGE_KEY>>::BTreeSearchKey(
    a1,
    StoreKey,
    v4);
  v13 = B_TREE<_SM_PAGE_KEY,ST_STORE::_ST_PAGE_ENTRY,4096,NP_CONTEXT,B_TREE_KEY_COMPARATOR<_SM_PAGE_KEY>>::BTreeInsertEx(
          (char **)a1,
          v4,
          &StoreKey);
  if( v13 >= 0 )
  {
    v3 = 1;
    if( !*(_BYTE *)(a1 + 776) )
    {
      v14 = *(_DWORD *)(a3 + 4) + 4096;
      *(_DWORD *)(a3 + 4) = v14;
      v15 = v14 >> 12;
      if( v15 > 1 )
        return 0;
      if( !v15 )
        __int2c();
    }
    v25 = v23;
    v13 = B_TREE::_ST_REGION_ENTRY,4096,NP_CONTEXT,ST_STORE::ST_REGION_ENTRY_COMPARATOR>::BTreeInsert(
            (char **)(a1 + 64),
            (int *)&v25,
            a1 + 88);
    if( v13 >= 0 )
    {
      v3 = 3;
      if( *(_BYTE *)(a1 + 776) )
        goto LABEL_17;
      v16 = B_TREE::_ST_HASH_ENTRY,4096,NP_CONTEXT,ST_STORE::ST_HASH_ENTRY_COMPARATOR>::BTreeSearchKey(
              a1 + 128,
              v23,
              a1 + 152);
      v13 = v16;
      if( v16 == -1073741275 )
      {
        v13 = B_TREE::_ST_HASH_ENTRY,4096,NP_CONTEXT,ST_STORE::ST_HASH_ENTRY_COMPARATOR>::BTreeInsertEx(
                (char **)(a1 + 128),
                a1 + 152,
                &v23);
      }
      else if( v16 >= 0 )
      {
        v13 = -1073741484;
      }
      if( v13 >= 0 )
      {
LABEL_17:
        v17 = 4096;
        if( (*(_DWORD *)(a3 + 4) & 0xFFF) != 0 )
          v17 = *(_DWORD *)(a3 + 4) & 0xFFF;
        ST_STORE::StDmpUpdateRegionState(
          a1,
          *(_DWORD *)a3 >> *(_DWORD *)(a1 + 812),
          (unsigned int)(*(_DWORD *)(a1 + 824) + 15 + v17) >> 4,
          0);
        v18 = SmEtwEnabled(0i64);
        if( v18 )
        {
          LODWORD(StoreId) = *(_DWORD *)a3;
          SmEtwLogStoreOp(
            v18,
            0i64,
            &StoreKey,
            (UINT64)v18,
            StoreId,
            a1,
            *(_WORD *)(a3 + 4) & 0xFFF,
            (2 * (*(_WORD *)v24 & 7)) | ((*(_DWORD *)v24 & 0x40000000) != 0));
        }
        return 0;
      }
    }
  }
  if( (v3 & 1) != 0 )
  {
    v20 = B_TREE<_SM_PAGE_KEY,ST_STORE::_ST_PAGE_ENTRY,4096,NP_CONTEXT,B_TREE_KEY_COMPARATOR<_SM_PAGE_KEY>>::BTreeDeleteEx(
            a1,
            v4);
    if( v20 < 0 )
    {
      if( v20 != -1073741818 )
        __int2c();
      v13 = v20;
    }
  }
  if( v3 >= 2 )
  {
    v21 = B_TREE::_ST_REGION_ENTRY,4096,NP_CONTEXT,ST_STORE::ST_REGION_ENTRY_COMPARATOR>::BTreeDeleteEx(
            a1 + 64,
            a1 + 88);
    if( v21 < 0 )
    {
      if( v21 != -1073741818 )
        __int2c();
      return(unsigned int)v21;
    }
  }
  return(unsigned int)v13;
}

Referenced by:

No references.