VfPendingMoreProcessingRequired

INT64 __fastcall VfPendingMoreProcessingRequired(INT64 a1, UINT64 Irp, INT64 a3, INT64 a4, INT64 a5){
  unsigned int v8; 
  volatile signed __int32 *v9; 
  volatile signed __int32 *v10; 
  int v11; 
  UINT64 v12; 
  bool v13; 
  char v14; 
  UINT8 *v15; 
  UINT64 v16; 
  char OldIrql[24]; 
  v8 = 0;
  v9 = VfIrpDatabaseEntryFindAndLock(Irp);
  v10 = v9;
  if( v9 )
  {
    if( a3 == *((_QWORD *)v9 + 27) )
    {
      v11 = *((_DWORD *)v9 + 14);
      if( v11 >= 0 )
      {
        v8 = 1;
        *((_DWORD *)v10 + 14) = v11 | 0x80000000;
      }
    }
    VfIrpDatabaseEntryReleaseLock(v10);
    if( v8 )
    {
      v8 = ViPendingDelayCompletion(a1, (INT64)v10, a3, a4, a5);
      if( !v8 )
      {
        KeAcquireSpinLockRaiseToDpc((UINT64 *)v10 + 1, v12);
        v13 = (*((_DWORD *)v10 + 6))-- == 1;
        *((_BYTE *)v10 + 16) = v14;
        OldIrql[0] = 0;
        if( v13 )
        {
          ViIrpDatabaseAcquireLockExclusive((UINT8 *)OldIrql);
          v15 = *(UINT8 **)v10;
          (*((void(__fastcall **)(volatile signed __int32 *, _QWORD, _QWORD))v10 + 6))(v10, *(_QWORD *)v10, v8 + 1);
          *(_QWORD *)v10 = 0i64;
          VfUtilAddressRangeRemoveCheckEmpty(
            (_VF_ADDRESS_RANGE *)(ViIrpDatabaseAddressRanges
                                + 16i64 * (unsigned __int8)(-125 * ((unsigned __int64)v15 >> 12))),
            v15,
            v16);
          ViIrpDatabaseReleaseLockExclusive(OldIrql[0]);
        }
        _InterlockedDecrement(v10 + 5);
        VfIrpDatabaseEntryReleaseLock(v10);
      }
    }
  }
  return v8;
}

Referenced by:

IovpLocalCompletionRoutine