SMKM_STORE_MGR::SmUpdateMemoryConditions

void __fastcall SMKM_STORE_MGR::SmUpdateMemoryConditions(_SMKM_STORE_LIST *StoreMgr, int a2, int a3){
  unsigned int i; 
  _BYTE *v6; 
  _BYTE *v7; 
  int v8; 
  __int64 v9; 
  unsigned int v10; 
  _ETHREAD *v11; 
  int v12; 
  _EX_RUNDOWN_REF *v13; 

  if( (StoreMgr[460] & 0x20) != 0 )
    SMKM_STORE_MGR::SmCompressContextUpdateMemoryCondition((INT64 *)StoreMgr + 158, a2, a3);
  for( i = 0; i < 0x400; ++i )
  {
    v6 = SmKmStoreReferenceEx(StoreMgr, i);
    v7 = v6;
    if( v6 )
    {
      v6[6022] = a2;
      v8 = (unsigned __int8)v6[6022];
      v9 = (unsigned __int8)v6[6022];
      if( v8 == 4 )
        v10 = *((_DWORD *)v7 + 1682);
      else
        v10 = *((_DWORD *)`SMKM_STORE::SmStGetPriorityByMemoryCondition'::`2'::PriorityByMemoryCondition + v9);
      v11 = (_ETHREAD *)*((_QWORD *)v7 + 775);
      KeQueryPriorityThread(v11);
      if( a2 < 4 )
      {
        if( v12 != v10 )
          KeSetActualBasePriorityThread(&v11->Tcb, v10);
        if( a2 <= 0 )
          ST_STORE::StDmLazyWorkItemQueue((__int64)(v7 + 80), (__int64)(v7 + 5976));
      }
      else if( v12 > (int)v10 )
      {
        KeSetActualBasePriorityThread(&v11->Tcb, v10);
      }
      v13 = (_EX_RUNDOWN_REF *)SmKmStoreRefFromStoreIndex((__int64)StoreMgr, *((_DWORD *)v7 + 1504) & 0x3FF);
      ExReleaseRundownProtection(v13 + 1);
    }
  }
}

Referenced by:

No references.