SmKmStoreDeleteWhenEmpty
INT64 __fastcall SmKmStoreDeleteWhenEmpty(INT64 a1, INT64 a2){
INT64 v4;
unsigned int v5;
int v6;
__int64 v8;
int v9;
struct _WORK_QUEUE_ITEM WorkItem;
__int64 Object;
__int64 v12[3];
int v13;
int v14;
int v15;
int v16;
v4 = SmKmStoreRefFromStoreIndex(a1, *(_DWORD *)(a2 + 6016) & 0x3FF);
v5 = 0;
if( v6 )
{
_InterlockedOr8((volatile signed __int8 *)(v4 + 34), 1u);
}
else if( (*(_BYTE *)(v4 + 34) & 1) == 0 )
{
return v5;
}
v15 = 0;
v16 = 0;
ST_STORE::StDmGetSpaceStats(a2 + 80, &v15, &v16);
if( (unsigned int)(v16 + 1023) < 0x400 )
{
_m_prefetchw((const void *)(v8 + 34));
if( (_InterlockedOr8((volatile signed __int8 *)(v8 + 34), 2u) & 2) == 0 )
{
WorkItem.List.Blink = 0i64;
v12[1] = (__int64)v12;
Object = 393216i64;
v12[0] = (__int64)v12;
v14 = 0;
WorkItem.WorkerRoutine = (void(__fastcall *)(void *))SmKmStoreDeleteWhenEmptyWorker;
WorkItem.Parameter = &WorkItem;
v12[2] = a1;
v13 = v9;
WorkItem.List.Flink = 0i64;
ExQueueWorkItem(&WorkItem, DelayedWorkQueue);
KeWaitForSingleObject(&Object, WrKernel, 0, 0, 0i64);
return 1;
}
}
return v5;
}Referenced by:
SMKM_STORE_MGR::SmFeEvictComplete
SmProcessDeleteNotification
SmpKeyedStoreCreate