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.