ST_STORE::StDmpSinglePageInsert
__int64 __fastcall ST_STORE::StDmpSinglePageInsert(UINT64 CompressedSize, __int64 a2, unsigned __int64 a3){
unsigned int v3;
UINT64 v4;
int v7;
int v9;
int v10;
int v11;
int v12;
int v13;
unsigned int v14;
unsigned int v15;
int v16;
int v17;
VOID *v18;
int v20;
int v21;
UINT64 StoreId;
unsigned int v23;
_WORD *v24;
unsigned int v25;
__int64 StoreKey;
v24 = (_WORD *)a2;
v3 = 0;
v4 = CompressedSize + 24;
v7 = *(_DWORD *)(CompressedSize + 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 *)CompressedSize,
v4);
v7 = *(_DWORD *)(v4 + 32);
}
*(_DWORD *)(v4 + 32) = v7 & 0xFFFFFFFE;
v9 = *(_DWORD *)(CompressedSize + 120);
if( (*(_BYTE *)(CompressedSize + 120) & 1) != 0 )
{
B_TREE::_ST_REGION_ENTRY,4096,NP_CONTEXT,ST_STORE::ST_REGION_ENTRY_COMPARATOR>::BTreeSearchResultDeref(
(__int64 *)(CompressedSize + 64),
CompressedSize + 88);
v9 = *(_DWORD *)(CompressedSize + 120);
}
*(_DWORD *)(CompressedSize + 120) = v9 & 0xFFFFFFFE;
v10 = *(_DWORD *)(CompressedSize + 184);
if( (*(_BYTE *)(CompressedSize + 184) & 1) != 0 )
{
B_TREE::_ST_HASH_ENTRY,4096,NP_CONTEXT,ST_STORE::ST_HASH_ENTRY_COMPARATOR>::BTreeSearchResultDeref(
(__int64 *)(CompressedSize + 128),
CompressedSize + 152);
v10 = *(_DWORD *)(CompressedSize + 184);
}
StoreKey = 0i64;
*(_DWORD *)(CompressedSize + 184) = v10 & 0xFFFFFFFE;
v11 = ((unsigned int)a3 - ((a3 & 0xFFFFF000) + *(_DWORD *)(CompressedSize + 472))) / *(_DWORD *)(CompressedSize + 464);
v12 = *(_DWORD *)((a3 & 0xFFFFFFFFFFFFF000ui64) + 0x10) << *(_DWORD *)(CompressedSize + 456);
LODWORD(StoreKey) = *(_DWORD *)(a2 + 16);
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(
CompressedSize,
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 **)CompressedSize,
v4,
&StoreKey);
if( v13 >= 0 )
{
v3 = 1;
if( !*(_BYTE *)(CompressedSize + 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 **)(CompressedSize + 64),
(int *)&v25,
CompressedSize + 88);
if( v13 >= 0 )
{
v3 = 3;
if( *(_BYTE *)(CompressedSize + 776) )
goto LABEL_17;
v16 = B_TREE::_ST_HASH_ENTRY,4096,NP_CONTEXT,ST_STORE::ST_HASH_ENTRY_COMPARATOR>::BTreeSearchKey(
CompressedSize + 128,
v23,
CompressedSize + 152);
v13 = v16;
if( v16 == -1073741275 )
{
v13 = B_TREE::_ST_HASH_ENTRY,4096,NP_CONTEXT,ST_STORE::ST_HASH_ENTRY_COMPARATOR>::BTreeInsertEx(
(char **)(CompressedSize + 128),
CompressedSize + 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(
CompressedSize,
(unsigned int)(*(_DWORD *)a3 >> *(_DWORD *)(CompressedSize + 812)),
(unsigned int)(*(_DWORD *)(CompressedSize + 824) + 15 + v17) >> 4,
0);
v18 = SmEtwEnabled(SmEtwKeywordStoreOps);
if( v18 )
{
LODWORD(StoreId) = *(_DWORD *)a3;
SmEtwLogStoreOp(
v18,
0i64,
&StoreKey,
(UINT64)v18,
StoreId,
CompressedSize,
*(_WORD *)(a3 + 4) & 0xFFF,
(2 * (*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(
CompressedSize,
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(
CompressedSize + 64,
CompressedSize + 88);
if( v21 < 0 )
{
if( v21 != -1073741818 )
__int2c();
return(unsigned int)v21;
}
}
return(unsigned int)v13;
}
Referenced by:
No references.