SmStoreCompressionStop

VOID __stdcall SmStoreCompressionStop(UINT64 TrimWsStore){
  int v1; 
  INT64 v2; 
  INT64 v3; 
  int v4; 
  _DWORD **v5; 
  __int64 v6; 
  struct _KEVENT Event; 
  struct _WORK_QUEUE_ITEM WorkItem; 
  INT64 v9; 
  __int64 v10; 
  WorkItem.List.Blink = 0i64;
  v1 = TrimWsStore;
  v9 = *((_QWORD *)KeGetCurrentThread() + 23);
  v2 = SmpKeyedStoreEntryGet((UINT64)&qword_140D23188, &v9, 0i64, 0i64);
  v3 = v2;
  if( v2 )
    v4 = *(unsigned __int16 *)(v2 + 16);
  else
    v4 = dword_140D231B0;
  if( v4 != -1 )
  {
    KeInitializeEvent(&Event, NotificationEvent, 0);
    WorkItem.List.Flink = 0i64;
    WorkItem.WorkerRoutine = (void(__fastcall *)(void *))SmpFlushStorePages;
    WorkItem.Parameter = &Event;
    ExQueueWorkItem(&WorkItem, CriticalWorkQueue);
    KeWaitForSingleObject(&Event, WrKernel, 0, 0, 0i64);
    if( v3 )
    {
      SmSwapStore(1);
      if( v1 )
      {
        v5 = (_DWORD **)SmKmStoreRefFromStoreIndex((INT64)&SmGlobals, v4 & 0x3FF);
        SMKM_STORE_MGR::SmTrimWsStore(v6, *v5, 0i64);
      }
      if( (int)MmQueryProcessWorkingSetSwapPages(v9, &v10) < 0 )
        SmSwapStore(2);
    }
  }
}

Referenced by:

MmProcessWorkingSetControl