IopIncrementVpbRefCount

NTSTATUS __stdcall IopIncrementVpbRefCount(_VPB *Vpb, UINT8 LockRequired){
  unsigned int *p_ReferenceCount; 
  NTSTATUS result; 
  _DEVICE_OBJECT *DeviceObject; 
  _DRIVER_OBJECT *DriverObject; 

  p_ReferenceCount = &Vpb->ReferenceCount;
  if( LockRequired )
    result = IopInterlockedIncrementUlong(LockQueueIoVpbLock, (INT64 *)&Vpb->ReferenceCount);
  else
    result = ++*p_ReferenceCount;
  if( result <= 0 )
  {
    DeviceObject = Vpb->DeviceObject;
    if( DeviceObject )
    {
      IoAddTriageDumpDataBlock(DeviceObject, (_BYTE *)0x150);
      DriverObject = Vpb->DeviceObject->DriverObject;
      if( DriverObject )
      {
        IoAddTriageDumpDataBlock(DriverObject, (_BYTE *)0x150);
        IoAddTriageDumpDataBlock(
          Vpb->DeviceObject->DriverObject->DriverName.Buffer,
          (_BYTE *)Vpb->DeviceObject->DriverObject->DriverName.Length);
      }
    }
    KeBugCheckEx(0x18u, 0i64, Vpb, (PVOID)7, (PVOID)*p_ReferenceCount);
  }
  return result;
}

Referenced by:

IoCreateStreamFileObjectEx2
IopMountInitializeVpb
IopParseDevice
IopReferenceVerifyVpb