PspQueueDeferredWorkAndWait

INT64 __stdcall PspQueueDeferredWorkAndWait(PVOID Parameter){
  void *v1; 
  __int64 v2; 
  struct _WORK_QUEUE_ITEM WorkItem; 
  struct _KEVENT Event; 
  INT64(__stdcall *v6)(PVOID); 
  __int64 v7; 
  unsigned int v8; 
  int v9; 
  WorkItem.List.Blink = 0i64;
  memset(&Event, 0, sizeof(Event));
  v2 = (__int64)v1;
  v9 = 0;
  if( (*(_DWORD *)(*((_QWORD *)KeGetCurrentThread() + 23) + 2172i64) & 0x1000) != 0 )
    return PspInitializeServerSiloDeferred(v1);
  KeInitializeEvent(&Event, SynchronizationEvent, 0);
  v8 = 0;
  WorkItem.List.Flink = 0i64;
  v6 = PspInitializeServerSiloDeferred;
  v7 = v2;
  WorkItem.WorkerRoutine = (void(__fastcall *)(void *))PspDeferredWorkerRoutine;
  WorkItem.Parameter = &Event;
  ExQueueWorkItem(&WorkItem, DelayedWorkQueue);
  KeWaitForSingleObject(&Event, UserRequest, 0, 0, 0i64);
  return v8;
}

Referenced by:

PspConvertSiloToServerSilo