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.