ST_STORE::StDmStart
INT64 __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;
unsigned __int64 v17;
int v18;
INT64 result;
INT64 v20;
int v21;
int v22;
__int64(__fastcall *v23)(__int64 *, __int64(__fastcall *)(_QWORD *, __int64, __int64), __int64);
__int64(__fastcall *v24)(__int64, __int64);
__int64(__fastcall *v25)(__int64, __int64, int);
__int64(__fastcall *v26)(__int64 *, int);
__int128 SystemInformation;
__int128 v28;
__int128 v29;
__int64 v30;
v30 = 0i64;
v7 = *a3;
SystemInformation = 0i64;
v28 = 0i64;
v29 = 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(
NonPagedPoolNx,
4 * (((unsigned __int64)*(unsigned int *)(a1 + 12) + 31) >> 5),
0x74536D73ui64);
if( !PoolWithTag )
return 3221225626i64;
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(
NonPagedPoolNx,
4 * (((unsigned __int64)*(unsigned int *)(a1 + 12) + 31) >> 5),
0x74536D73ui64);
if( !v16 )
return 3221225626i64;
*(_DWORD *)(a2 + 1072) = *(_DWORD *)(a1 + 12);
*(_QWORD *)(a2 + 1080) = v16;
RtlSetAllBits((RTL_BITMAP *)(a2 + 1072));
LODWORD(v17) = 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) )
{
v20 = 0x400000010i64;
SmHpChunkHeapCleanup(a2 + 192);
SmHpChunkHeapInitialize(a2 + 192, (INT64)&v20);
}
v18 = *a3;
v22 = 0;
if( (v18 & 8) != 0 )
{
result = ZwQuerySystemInformation();
if( (int)result < 0 )
return result;
if( (unsigned __int64)SystemInformation >> 21 >= 0x10 )
{
v17 = (unsigned __int64)SystemInformation >> 21;
if( (unsigned __int64)SystemInformation >> 21 > 0xFFFFFFFF )
LODWORD(v17) = -1;
}
v21 = v17;
v22 = 4;
}
else
{
v21 = -1;
}
v23 = ST_STORE::StNpEnumBTreeNodes;
v24 = ST_STORE::StNpLeafPageOut;
v25 = ST_STORE::StNpLeafPageIn;
v26 = ST_STORE::StNpLeafDelete;
result = NP_CONTEXT::NpStart((struct NP_CONTEXT *)(a2 + 1376), (struct NP_CONTEXT::_NP_PARAMETERS *)&v21);
if( (int)result >= 0 )
{
result = NP_CONTEXT::NpStart((struct NP_CONTEXT *)(a2 + 1512), (struct NP_CONTEXT::_NP_PARAMETERS *)&v21);
if( (int)result >= 0 )
{
result = NP_CONTEXT::NpStart((struct NP_CONTEXT *)(a2 + 1648), (struct NP_CONTEXT::_NP_PARAMETERS *)&v21);
if( (int)result >= 0 )
return 0i64;
}
}
return result;
}
Referenced by:
No references.