B_TREE<_SM_PAGE_KEY,SMKM_STORE_MGR::SMKM_FRONTEND_ENTRY,4096,B_TREE_DUMMY_NODE_POOL,B_TREE_KEY_COMPARATOR<_SM_PAGE_KEY>>::BTreeDeleteEx
__int64 __fastcall B_TREE<_SM_PAGE_KEY,SMKM_STORE_MGR::SMKM_FRONTEND_ENTRY,4096,B_TREE_DUMMY_NODE_POOL,B_TREE_KEY_COMPARATOR<_SM_PAGE_KEY>>::BTreeDeleteEx(
_QWORD *a1,
__int64 a2){
unsigned int v3;
UINT8 *v4;
_BYTE *v6;
UINT8 *v7;
char v8;
__int64 v9;
__int64 v10;
unsigned int v11;
__int64 v12;
UINT64 v13;
unsigned __int64 v14;
__int64 v15;
_DWORD *v16;
__int64 v18;
unsigned int v19;
__int64 v20;
__int64 v21;
unsigned __int64 v22;
unsigned __int64 v23;
__int64 v24;
__int64 v25;
__int128 v26;
unsigned int v27;
v3 = 0;
v4 = (UINT8 *)(*(_QWORD *)a2 + 16i64 * (unsigned int)(*(_DWORD *)(a2 + 24) - 1));
v26 = 0i64;
v6 = *(_BYTE **)v4;
v7 = (UINT8 *)*((_QWORD *)v4 + 1);
v8 = *(_BYTE *)(*(_QWORD *)v4 + 3i64);
v9 = (unsigned __int16)**(_DWORD **)v4;
if( v8 )
{
v10 = 8 * v9 + 8;
v11 = 255;
v12 = 8i64;
}
else
{
v11 = 127;
v10 = 16 * v9;
v12 = 16i64;
}
v27 = v11;
v13 = (UINT64)&v6[v10 - (_QWORD)v7];
if( v13 )
{
memmove(v7, &v7[v12], v13);
v8 = v6[3];
}
--*(_WORD *)v6;
if( v8 )
--a1[1];
v14 = (unsigned __int16)*(_DWORD *)v6;
if( (_BYTE *)*a1 != v6 )
{
if( (unsigned int)v14 >= v11 )
{
LABEL_9:
v15 = *(_QWORD *)v4;
v16 = (_DWORD *)*((_QWORD *)v4 + 1);
if( v16 == (_DWORD *)(v15 + 16)
&& *(_BYTE *)(v15 + 3)
&& (unsigned int)B_TREE<_SM_PAGE_KEY,SMKM_STORE_MGR::SMKM_FRONTEND_ENTRY,4096,B_TREE_DUMMY_NODE_POOL,B_TREE_KEY_COMPARATOR<_SM_PAGE_KEY>>::BTreeFindSeperatorIndexEntry(
a2,
0,
(__int64)&v26) )
{
**((_DWORD **)&v26 + 1) = *v16;
}
return v3;
}
v18 = B_TREE<_SM_PAGE_KEY,SMKM_STORE_MGR::SMKM_FRONTEND_ENTRY,4096,B_TREE_DUMMY_NODE_POOL,B_TREE_KEY_COMPARATOR<_SM_PAGE_KEY>>::BTreeRedistribute(
(_DWORD *)v14,
a2);
if( !v18 )
return(unsigned int)-1073741818;
v19 = (unsigned __int16)*(_DWORD *)v6;
if( v19 < v27 )
{
B_TREE<_SM_PAGE_KEY,SMKM_STORE_MGR::SMKM_FRONTEND_ENTRY,4096,B_TREE_DUMMY_NODE_POOL,B_TREE_KEY_COMPARATOR<_SM_PAGE_KEY>>::BTreeMergeNodes(
(__int64)a1,
a2,
v18);
v4 = (UINT8 *)(*(_QWORD *)a2 + 16i64 * (unsigned int)(*(_DWORD *)(a2 + 24) - 1));
if( (v18 & 1) == 0 )
goto LABEL_9;
v23 = v18 & 0xFFFFFFFFFFFFFFFEui64;
*(_QWORD *)v4 = v23;
v24 = (unsigned __int16)*(_DWORD *)v23;
if( *(_BYTE *)(v23 + 3) )
v25 = 8 * v24 + 16;
else
v25 = 16 * (v24 + 1);
v22 = v23 + v25 - v13;
}
else
{
if( (v18 & 1) == 0 )
goto LABEL_9;
v20 = *((_QWORD *)v4 + 1);
v21 = v19 - v27 + 1;
if( v6[3] )
v22 = v20 + 8 * v21;
else
v22 = v20 + 16 * v21;
}
*((_QWORD *)v4 + 1) = v22;
goto LABEL_9;
}
if( !(unsigned __int16)*(_DWORD *)v6 && !v6[3] )
{
memmove(v4, v4 + 16, 16i64 * (unsigned int)(*(_DWORD *)(a2 + 28) - 1));
--*(_DWORD *)(a2 + 24);
*a1 = *((_QWORD *)v6 + 1);
ExFreePoolWithTag(v6, 0);
}
return v3;
}
Referenced by:
No references.