SMKM_STORE_MGR::SmUpdateMemoryConditions

void __fastcall SMKM_STORE_MGR::SmUpdateMemoryConditions(__int64 a1, int a2, int a3){
  unsigned int i; 
  UINT64 v6; 
  UINT64 v7; 
  int v8; 
  __int64 v9; 
  int v10; 
  _KTHREAD *v11; 
  NTSTATUS PriorityThread; 
  struct _EX_RUNDOWN_REF *v13; 
  if( (*(_DWORD *)(a1 + 1840) & 0x20) != 0 )
    SMKM_STORE_MGR::SmCompressContextUpdateMemoryCondition((PEX_SPIN_LOCK)(a1 + 1264), a2, a3);
  for( i = 0; i < 0x400; ++i )
  {
    v6 = SmKmStoreReferenceEx(a1, i);
    v7 = v6;
    if( v6 )
    {
      *(_BYTE *)(v6 + 6022) = a2;
      v8 = *(unsigned __int8 *)(v6 + 6022);
      v9 = *(unsigned __int8 *)(v6 + 6022);
      if( v8 == 4 )
        v10 = *(_DWORD *)(v7 + 6728);
      else
        v10 = *((_DWORD *)`SMKM_STORE::SmStGetPriorityByMemoryCondition'::`2'::PriorityByMemoryCondition + v9);
      v11 = *(_ETHREAD **)(v7 + 6200);
      PriorityThread = KeQueryPriorityThread((_KTHREAD *)v11);
      if( a2 < 4 )
      {
        if( PriorityThread != v10 )
          KeSetActualBasePriorityThread((__int64)v11, v10);
        if( a2 <= 0 )
          ST_STORE::StDmLazyWorkItemQueue(v7 + 80, v7 + 5976);
      }
      else if( PriorityThread > v10 )
      {
        KeSetActualBasePriorityThread((__int64)v11, v10);
      }
      v13 = (struct _EX_RUNDOWN_REF *)SmKmStoreRefFromStoreIndex(a1, *(_DWORD *)(v7 + 6016) & 0x3FF);
      ExReleaseRundownProtection(v13 + 1);
    }
  }
}

Referenced by:

No references.