SMKM_STORE_MGR::SmStoreTerminate
__int64 __fastcall SMKM_STORE_MGR::SmStoreTerminate(__int64 a1, __int64 a2, int a3, int a4){
WORK_QUEUE_ITEM *PoolWithTag;
unsigned int v9;
int v10;
PoolWithTag = (WORK_QUEUE_ITEM *)ExAllocatePoolWithTag(NonPagedPoolNx, 0x40ui64, 0x6D546D73ui64);
if( PoolWithTag )
{
if( SmKmStoreReference(a1, *(unsigned int *)(a2 + 6016)) )
{
PoolWithTag->List.Blink = 0i64;
PoolWithTag[1].WorkerRoutine = 0i64;
PoolWithTag[1].Parameter = 0i64;
PoolWithTag->List.Flink = 0i64;
PoolWithTag->WorkerRoutine = (void(__fastcall *)(void *))SmKmStoreTerminateWorker;
PoolWithTag->Parameter = PoolWithTag;
PoolWithTag[1].List.Blink = (_LIST_ENTRY *)(a2 + 6216);
PoolWithTag[1].List.Flink = (_LIST_ENTRY *)a1;
LODWORD(PoolWithTag[1].WorkerRoutine) = *(_DWORD *)(a2 + 6016);
v10 = *(_DWORD *)(a1 + 1840) & 1;
LODWORD(PoolWithTag[1].Parameter) = a3;
HIDWORD(PoolWithTag[1].WorkerRoutine) = v10;
HIDWORD(PoolWithTag[1].Parameter) = a4;
ExQueueWorkItem(PoolWithTag, CriticalWorkQueue);
PoolWithTag = 0i64;
v9 = 0;
}
else
{
v9 = -1073741431;
}
if( PoolWithTag )
ExFreePoolWithTag(PoolWithTag, 0);
}
else
{
return(unsigned int)-1073741670;
}
return v9;
}
Referenced by:
No references.