SmStoreCompressionStop

VOID __stdcall SmStoreCompressionStop(UINT64 TrimWsStore){
  int v1; 
  __int64 v2; 
  __int64 v3; 
  int v4; 
  _DWORD **v5; 
  __int64 v6; 
  char Object[24]; 
  _WORK_QUEUE_ITEM WorkItem; 
  INT64 a2; 
  UINT64 OutSwappedPages; 

  WorkItem.List.Blink = 0i64;
  v1 = TrimWsStore;
  a2 = (INT64)KeGetCurrentThread()->ApcState.Process;
  LODWORD(v2) = SmpKeyedStoreEntryGet((UINT64)&KeyedStoreCtx, &a2, 0i64, 0i64);
  v3 = v2;
  if( v2 )
    v4 = *(unsigned __int16 *)(v2 + 16);
  else
    v4 = dword_140D231B0;
  if( v4 != -1 )
  {
    KeInitializeEvent((INT64)Object, 0, 0);
    WorkItem.List.Flink = 0i64;
    WorkItem.WorkerRoutine = (void(__fastcall *)(void *))SmpFlushStorePages;
    WorkItem.Parameter = Object;
    ExQueueWorkItem(&WorkItem, CriticalWorkQueue);
    KeWaitForSingleObject((UINT64)Object, 26, 0, 0, 0i64);
    if( v3 )
    {
      SmSwapStore(SmSwapStoreRequestOutSwap);
      if( v1 )
      {
        v5 = (_DWORD **)SmKmStoreRefFromStoreIndex((__int64)SmGlobals, v4 & 0x3FF);
        SMKM_STORE_MGR::SmTrimWsStore(v6, *v5, 0i64);
      }
      if( MmQueryProcessWorkingSetSwapPages((_EPROCESS *)a2, &OutSwappedPages) < 0 )
        SmSwapStore(SmSwapStoreRequestInSwap);
    }
  }
}

Referenced by:

MmProcessWorkingSetControl