ViPendingDelayCompletion

NTSTATUS __stdcall ViPendingDelayCompletion(
        _DEVICE_OBJECT *DeviceObject,
        _IOV_REQUEST_PACKET *IovPacket,
        _IO_STACK_LOCATION *StackLocation,
        INT64 *CompletionRoutine,
        _DEVICE_OBJECT *a5,
        _IRP *a6,
        VOID *a7,
        VOID *CompletionContext){
  NTSTATUS v12; 
  VOID **PoolWithTag; 
  VOID **v14; 
  _KTIMER *v15; 
  __int64 v16; 
  _ADAPTER_OBJECT *v17; 

  v12 = 1;
  PoolWithTag = ExAllocatePoolWithTag(0x200ui64, 0xB0ui64, 1685090889i64);
  v14 = PoolWithTag;
  if( !PoolWithTag )
    return 0;
  v15 = (_KTIMER *)(PoolWithTag + 13);
  KeInitializeTimerEx((INT64)(PoolWithTag + 13), 1);
  IovPacket[14] |= 0x10u;
  v14[4] = a5;
  *v14 = IovPacket;
  v14[1] = DeviceObject;
  v14[3] = CompletionRoutine;
  v14[2] = StackLocation;
  *((_BYTE *)v14 + 172) = *((_BYTE *)IovPacket + 185);
  v16 = *((_QWORD *)IovPacket + 27);
  if( v16 && (v17 = *(_ADAPTER_OBJECT **)(v16 + 40)) != 0i64 )
    ObfReferenceObject(v17);
  else
    v17 = 0i64;
  if( KeGetCurrentIrql() >= 2u )
  {
    *((_DWORD *)v14 + 42) = 2;
    KeInitializeDpc((PRKDPC)(v14 + 5), ViPendingCompleteAtDPC, v14);
    KiSetTimerEx(v15, (_LARGE_INTEGER)-3000i64, 0i64, 0, (_KDPC *)(v14 + 5));
  }
  else
  {
    *((_DWORD *)v14 + 42) = 1;
    KiSetTimerEx(v15, (_LARGE_INTEGER)-3000i64, 0i64, 0, 0i64);
    v12 = ViPendingQueuePassiveLevelCompletion((_VF_PENDING_DEFERRAL_CONTEXT *)v14);
    if( !v12 )
    {
      KeCancelTimer((INT64)v15);
      ExFreePoolWithTag(v14, 0);
      IovPacket[14] &= ~0x10u;
      if( v17 )
        HalPutDmaAdapter(v17);
    }
  }
  return v12;
}

Referenced by:

VfPendingMoreProcessingRequired