ST_STORE::StDmStart
void __fastcall ST_STORE::StDmStart(__int64 a1, __int64 a2, int *a3, __int64 a4, int a5, int a6){
int v7;
__int64 v10;
__int64 v11;
__int64 v12;
int v13;
VOID **PoolWithTag;
_RTL_BITMAP *v15;
VOID **v16;
UINT64 v17;
UINT64 v18;
unsigned __int64 v19;
int v20;
int v21;
_SMHP_CHUNK_PARAMS Parameters;
int v23;
int v24;
__int64(__fastcall *v25)(__int64 *, __int64(__fastcall *)(_QWORD *, __int64, __int64), __int64);
__int64(__fastcall *v26)(__int64, __int64);
__int64(__fastcall *v27)(__int64, __int64, int);
__int64(__fastcall *v28)(__int64 *, int);
__int128 v29;
__int128 v30;
__int128 v31;
__int64 v32;
v32 = 0i64;
v7 = *a3;
v29 = 0i64;
v30 = 0i64;
v31 = 0i64;
*(_OWORD *)(a2 + 776) = *(_OWORD *)a1;
*(_OWORD *)(a2 + 792) = *(_OWORD *)(a1 + 16);
*(_OWORD *)(a2 + 808) = *(_OWORD *)(a1 + 32);
v10 = *(_QWORD *)(a1 + 48);
*(_DWORD *)(a2 + 832) = v7;
v11 = a1 + 5736;
*(_QWORD *)(a2 + 824) = v10;
v12 = *(_QWORD *)(a1 + 4016);
*(_QWORD *)(a2 + 1920) = v11;
*(_QWORD *)(a2 + 896) = v12;
*(_QWORD *)(a2 + 1000) = *(_QWORD *)(a1 + 3952);
*(_QWORD *)(a2 + 1016) = a1 + 4064;
*(_QWORD *)(a2 + 1784) = *(_QWORD *)(a1 + 4208);
*(_QWORD *)(a2 + 1912) = a1 + 5744;
*(_WORD *)(a2 + 992) = *(_WORD *)(a1 + 4032);
*(_QWORD *)(a2 + 936) = a2 + 24;
*(_QWORD *)(a2 + 944) = a2 + 88;
v13 = *(_DWORD *)(a2 + 776);
*(_QWORD *)(a2 + 928) = v12;
if( (v13 & 0x40000) != 0 )
{
PoolWithTag = ExAllocatePoolWithTag(
0x200ui64,
4 * (((unsigned __int64)*(unsigned int *)(a1 + 12) + 31) >> 5),
1951624563i64);
if( !PoolWithTag )
return;
v15 = (_RTL_BITMAP *)(a2 + 840);
*(_DWORD *)(a2 + 840) = *(_DWORD *)(a1 + 12);
*(_QWORD *)(a2 + 848) = PoolWithTag;
v13 = *(_DWORD *)(a2 + 776);
}
else
{
v15 = (_RTL_BITMAP *)(a2 + 840);
}
if( (v13 & 0x40000) != 0 )
RtlSetAllBits(v15);
v16 = ExAllocatePoolWithTag(0x200ui64, 4 * (((unsigned __int64)*(unsigned int *)(a1 + 12) + 31) >> 5), 1951624563i64);
if( v16 )
{
*(_DWORD *)(a2 + 1072) = *(_DWORD *)(a1 + 12);
*(_QWORD *)(a2 + 1080) = v16;
RtlSetAllBits((PRTL_BITMAP)(a2 + 1072));
LODWORD(v19) = 16;
*(_QWORD *)(a2 + 1032) = *(_QWORD *)(a1 + 56);
*(_QWORD *)(a2 + 1040) = *(_QWORD *)(a1 + 64);
*(_QWORD *)(a2 + 1048) = *(_QWORD *)(a1 + 72);
*(_DWORD *)(a2 + 856) = a6;
if( *(_DWORD *)(*(_QWORD *)(a2 + 1016) + 24i64) )
{
Parameters.ChunkSize = 16;
Parameters.ChunkAlignment = 4;
SmHpChunkHeapCleanup((_SMHP_CHUNK_HEAP *)(a2 + 192), v17, v18);
SmHpChunkHeapInitialize((VOID *)(a2 + 192), &Parameters);
}
v20 = *a3;
v24 = 0;
if( (v20 & 8) != 0 )
{
ZwQuerySystemInformation();
if( v21 < 0 )
return;
if( (unsigned __int64)v29 >> 21 >= 0x10 )
{
v19 = (unsigned __int64)v29 >> 21;
if( (unsigned __int64)v29 >> 21 > 0xFFFFFFFF )
LODWORD(v19) = -1;
}
v23 = v19;
v24 = 4;
}
else
{
v23 = -1;
}
v25 = ST_STORE::StNpEnumBTreeNodes;
v26 = ST_STORE::StNpLeafPageOut;
v27 = ST_STORE::StNpLeafPageIn;
v28 = ST_STORE::StNpLeafDelete;
if( (int)NP_CONTEXT::NpStart((struct NP_CONTEXT *)(a2 + 1376), (struct NP_CONTEXT::_NP_PARAMETERS *)&v23) >= 0
&& (int)NP_CONTEXT::NpStart((struct NP_CONTEXT *)(a2 + 1512), (struct NP_CONTEXT::_NP_PARAMETERS *)&v23) >= 0 )
{
NP_CONTEXT::NpStart((struct NP_CONTEXT *)(a2 + 1648), (struct NP_CONTEXT::_NP_PARAMETERS *)&v23);
}
}
}
Referenced by:
No references.