PspQueueDeferredWorkAndWait

NTSTATUS __stdcall PspQueueDeferredWorkAndWait(VOID *Parameter){
  VOID *v1; 
  __int64 v2; 
  _WORK_QUEUE_ITEM WorkItem; 
  __int64 Object; 
  __int128 v6; 
  NTSTATUS(__stdcall *v7)(VOID *); 
  __int64 v8; 
  NTSTATUS v9; 
  int v10; 

  WorkItem.List.Blink = 0i64;
  Object = 0i64;
  v2 = (__int64)v1;
  v10 = 0;
  v6 = 0i64;
  if( (KeGetCurrentThread()->ApcState.Process->Flags3 & 0x1000) != 0 )
    return PspInitializeServerSiloDeferred(v1);
  KeInitializeEvent((INT64)&Object, 1, 0);
  v9 = 0;
  WorkItem.List.Flink = 0i64;
  v7 = PspInitializeServerSiloDeferred;
  v8 = v2;
  WorkItem.WorkerRoutine = (void(__fastcall *)(void *))PspDeferredWorkerRoutine;
  WorkItem.Parameter = &Object;
  ExQueueWorkItem(&WorkItem, DelayedWorkQueue);
  KeWaitForSingleObject((UINT64)&Object, 6, 0, 0, 0i64);
  return v9;
}

Referenced by:

PspConvertSiloToServerSilo