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