SMKM_STORE_MGR::SmCompressCtxBalancerThread

VOID *__fastcall SMKM_STORE_MGR::SmCompressCtxBalancerThread(PVOID P){
  __int64 v1; 
  unsigned __int64 v3; 
  unsigned int v4; 
  unsigned __int64 v5; 

  v1 = *(_QWORD *)P;
  KeSetActualBasePriorityThread(KeGetCurrentThread(), 25i64);
  while( 1 )
  {
    KeWaitForSingleObject(v1 + 48, 26, 0, 0, 0i64);
    v3 = (unsigned __int8)ExAcquireSpinLockExclusive((INT64 *)v1);
    KeResetEvent((_KEVENT *)(v1 + 48));
    v4 = *(_DWORD *)(v1 + 88);
    if( !v4 )
      break;
    v5 = *(unsigned int *)(v1 + 92);
    if( v4 <= (unsigned int)v5 || **(_QWORD **)(v1 + 16) >> 1 <= v5 )
    {
      ExReleaseSpinLockExclusiveFromDpcLevel((INT64 *)v1);
      __writecr8(v3);
    }
    else
    {
      ExReleaseSpinLockExclusiveFromDpcLevel((INT64 *)v1);
      __writecr8(v3);
      SMKM_STORE_MGR::SmCompressCtxCreateThread(v1, *((_QWORD *)P + 1), 1);
    }
  }
  ExReleaseSpinLockExclusiveFromDpcLevel((INT64 *)v1);
  __writecr8(v3);
  return SMKM_STORE_MGR::SmCompressContextDeleteThreadParams(P);
}

Referenced by:

No references.