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.