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