VfIoFreeIrp

NTSTATUS __stdcall VfIoFreeIrp(PVOID Irp, const VOID *CallerAddress){
  _IOV_DATABASE_HEADER *v4; 
  _IOV_DATABASE_HEADER *v5; 
  _IOV_DATABASE_HEADER v7; 
  NTSTATUS v8; 
  bool v9; 
  UINT8 *v10; 
  UINT8 *v11; 
  UINT8 OldIrql; 
  UINT8 v13; 

  if( (*((_BYTE *)Irp + 71) & 0x21) != 33 )
  {
    v4 = VfIrpDatabaseEntryFindAndLock((_IRP *)Irp);
    v5 = v4;
    if( v4 )
    {
      if( *((PVOID *)Irp + 4) != (char *)Irp + 32 )
      {
        ViErrorReport1(524, (VOID *)CallerAddress, Irp);
        VfIrpDatabaseEntryReleaseLock(v5);
        return 1;
      }
      v7 = v4[14];
      if( *((_QWORD *)v5 + 30) )
      {
        if( (v7 & 0x400000) == 0 )
          ViErrorReport1(523, (VOID *)CallerAddress, Irp);
        v8 = 1;
      }
      else
      {
        if( (v7 & 0x200000) != 0 )
        {
          if( (v7 & 8) != 0 )
          {
            v8 = 1;
            *(_WORD *)Irp = 0;
            if( (*((_BYTE *)Irp + 71) & 1) != 0 )
            {
              PsReturnProcessNonPagedPoolQuota(*((_EPROCESS **)v5 + 11), (unsigned int)v5[21]);
              ObfDereferenceObjectWithTag(*((VOID **)v5 + 11), 0x49667256ui64);
            }
            v9 = v5[6]-- == 1;
            v13 = 0;
            if( v9 )
            {
              ViIrpDatabaseAcquireLockExclusive(&v13);
              v11 = *(UINT8 **)v5;
              (*((void(__fastcall **)(_IOV_DATABASE_HEADER *, _QWORD, __int64))v5 + 6))(v5, *(_QWORD *)v5, 1i64);
              *(_QWORD *)v5 = 0i64;
              VfUtilAddressRangeRemoveCheckEmpty(
                (_VF_ADDRESS_RANGE *)(ViIrpDatabaseAddressRanges
                                    + 16i64 * (unsigned __int8)(-125 * ((unsigned __int64)v11 >> 12))),
                v11);
              ViIrpDatabaseReleaseLockExclusive(v13);
            }
            _InterlockedDecrement(v5 + 5);
            VfIrpDatabaseEntryReleaseLock(v5);
            ExFreePoolWithTag(Irp, 0);
            return v8;
          }
          v9 = v5[6]-- == 1;
          OldIrql = 0;
          if( v9 )
          {
            ViIrpDatabaseAcquireLockExclusive(&OldIrql);
            v10 = *(UINT8 **)v5;
            (*((void(__fastcall **)(_IOV_DATABASE_HEADER *, _QWORD, __int64))v5 + 6))(v5, *(_QWORD *)v5, 1i64);
            *(_QWORD *)v5 = 0i64;
            VfUtilAddressRangeRemoveCheckEmpty(
              (_VF_ADDRESS_RANGE *)(ViIrpDatabaseAddressRanges
                                  + 16i64 * (unsigned __int8)(-125 * ((unsigned __int64)v10 >> 12))),
              v10);
            ViIrpDatabaseReleaseLockExclusive(OldIrql);
          }
          _InterlockedDecrement(v5 + 5);
        }
        v8 = 0;
      }
      VfIrpDatabaseEntryReleaseLock(v5);
      return v8;
    }
  }
  return 0;
}

Referenced by:

IovFreeIrpPrivate