ST_STORE::StCompactionPerformEmergency

__int64 __fastcall ST_STORE::StCompactionPerformEmergency(__int64 a1){
  int v1; 
  int v2; 
  int v3; 
  unsigned int v5; 
  int v6; 
  UINT64 UnbiasedInterruptTime; 
  __int64 v8; 
  _WORD *v9; 
  _WORD *v10; 
  _WORD *v11; 
  unsigned __int64 v12; 
  unsigned int v13; 
  __int64 v15; 
  unsigned int v16; 
  unsigned int v17; 
  __int64 v18; 
  __int64 v19; 
  unsigned int v20; 
  __int64 v21; 
  unsigned int v23; 
  int v24; 
  _WORD *v25; 
  UINT64 v26; 
  v1 = *(_DWORD *)(a1 + 784);
  v2 = 0;
  v24 = v1;
  v3 = 0;
  ST_STORE::StDmLazyRegionsWorker(a1, 0, 0i64);
  v5 = (unsigned int)(v1 - 4096) >> 4;
  v6 = 0;
  v23 = v5;
  UnbiasedInterruptTime = KiQueryUnbiasedInterruptTime(1u);
  v8 = *(_QWORD *)(a1 + 1032);
  v26 = UnbiasedInterruptTime;
  v9 = (_WORD *)(v8 + 2i64 * *(unsigned int *)(a1 + 1096));
  v25 = v9;
  v10 = (_WORD *)(v8 + 2i64 * *(unsigned int *)(a1 + 856));
  while( 2 )
  {
    v11 = v9;
    if( v9 >= v10 )
      goto LABEL_29;
    do
    {
      if( *(_DWORD *)(*(_QWORD *)(a1 + 800) + 6100i64)
         + *(_DWORD *)(*(_QWORD *)(a1 + 800) + 6592i64)
         + *(_DWORD *)(*(_QWORD *)(a1 + 800) + 6096i64)
        && (v6 & 7) == 0
        && v6 )
      {
        v12 = KiQueryUnbiasedInterruptTime(1u) - v26;
        if( !(v13 >= 0x40 ? v12 < 0x1C9C380 : v12 < 0x2FAF080) )
          break;
      }
      if( (*v11 & 0x1FFF) == 0 || (*v11 & 0x1FFFu) > v5 )
        goto LABEL_27;
      v15 = ((__int64)v11 - *(_QWORD *)(a1 + 1032)) >> 1;
      if( !SMKM_STORE::SmStIsRegionBusy(*(_QWORD *)(a1 + 800), v15) )
      {
        v17 = v16 >> 13;
        if( *(_BYTE *)(a1 + 776) )
          v17 = 0;
        if( (_DWORD)v15 == *(_DWORD *)(a1 + 16 * (v17 + 78i64)) )
          goto LABEL_26;
        ++v6;
        if( (int)ST_STORE::StCompactRegions(a1, 0i64, v15, 0i64, v15, 0) >= 0 )
          goto LABEL_24;
        if( (unsigned int)ST_STORE::StDmCheckForCompaction(a1, 2) != 2 )
          break;
        v18 = ST_STORE::StMapAndLockRegion(a1, v15, 0, 1i64);
        if( v18 )
        {
          if( v18 != -1 )
          {
            if( (int)ST_STORE::StCompactRegions(a1, v18, v15, v18, v15, 0) < 0 )
              NT_ASSERT("(((NTSTATUS)(Status)) >= 0)");
            ST_STORE::StUnlockAndUnmapRegion(a1, v15, v19);
LABEL_24:
            v21 = *(_QWORD *)(*(_QWORD *)(*(_QWORD *)(a1 + 800) + 6216i64) + 8i64 * (unsigned int)v15);
            if( v21 >= 0 )
            {
              v20 = (16 * (*v11 & 0x1FFF) + 4095) & 0xFFFFF000;
              MmStoreDecommitVirtualMemory((PVOID)(v20 + (v21 & 0x7FFFFFFFFFFF0000i64)), v24 - v20);
            }
            goto LABEL_26;
          }
        }
      }
      v3 = 1;
LABEL_26:
      v5 = v23;
LABEL_27:
      ++v11;
    }
    while( v11 < v10 );
    v9 = v25;
    v5 = v23;
LABEL_29:
    if( v11 == v10 )
    {
      if( v9 != *(_WORD **)(a1 + 1032) )
      {
        v10 = v9;
        v25 = *(_WORD **)(a1 + 1032);
        v9 = v25;
        continue;
      }
    }
    else
    {
      v2 = ((__int64)v11 - *(_QWORD *)(a1 + 1032)) >> 1;
    }
    break;
  }
  *(_DWORD *)(a1 + 1096) = v2;
  return v3 != 0 ? 0xC000022D : 0;
}

Referenced by:

No references.