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.