VfPendingMoreProcessingRequired

NTSTATUS __stdcall VfPendingMoreProcessingRequired(
        _DEVICE_OBJECT *DeviceObject,
        _IRP *Irp,
        _IO_STACK_LOCATION *StackLocation,
        INT64 *CompletionRoutine,
        _DEVICE_OBJECT *a5,
        _IRP *a6,
        VOID *a7,
        VOID *CompletionContext){
  NTSTATUS v11; 
  _IOV_DATABASE_HEADER *v12; 
  _IOV_DATABASE_HEADER *v13; 
  int v14; 
  char v15; 
  bool v16; 
  UINT8 *v17; 
  _IRP *v19; 
  VOID *OldIrql[3]; 

  v11 = 0;
  v12 = VfIrpDatabaseEntryFindAndLock(Irp);
  v13 = v12;
  if( v12 )
  {
    if( StackLocation == *((_IO_STACK_LOCATION **)v12 + 27) )
    {
      v14 = v12[14];
      if( v14 >= 0 )
      {
        v11 = 1;
        v13[14] = v14 | 0x80000000;
      }
    }
    VfIrpDatabaseEntryReleaseLock(v13);
    if( v11 )
    {
      v11 = ViPendingDelayCompletion(
              DeviceObject,
              v13,
              StackLocation,
              CompletionRoutine,
              a5,
              v19,
              OldIrql[0],
              OldIrql[1]);
      if( !v11 )
      {
        v15 = KeAcquireSpinLockRaiseToDpc((UINT64 *)v13 + 1);
        v16 = v13[6]-- == 1;
        *((_BYTE *)v13 + 16) = v15;
        LOBYTE(OldIrql[0]) = 0;
        if( v16 )
        {
          ViIrpDatabaseAcquireLockExclusive((UINT8 *)OldIrql);
          v17 = *(UINT8 **)v13;
          (*((void(__fastcall **)(_IOV_DATABASE_HEADER *, _QWORD, _QWORD))v13 + 6))(
            v13,
            *(_QWORD *)v13,
            (unsigned int)(v11 + 1));
          *(_QWORD *)v13 = 0i64;
          VfUtilAddressRangeRemoveCheckEmpty(
            (_VF_ADDRESS_RANGE *)(ViIrpDatabaseAddressRanges
                                + 16i64 * (unsigned __int8)(-125 * ((unsigned __int64)v17 >> 12))),
            v17);
          ViIrpDatabaseReleaseLockExclusive((UINT8)OldIrql[0]);
        }
        _InterlockedDecrement(v13 + 5);
        VfIrpDatabaseEntryReleaseLock(v13);
      }
    }
  }
  return v11;
}

Referenced by:

IovpLocalCompletionRoutine