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.