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.