VerifierIoInitializeRemoveLockEx

void __fastcall VerifierIoInitializeRemoveLockEx(
        _IO_REMOVE_LOCK *PublicLock,
        UINT64 AllocateTag,
        UINT64 MaxLockedMinutes,
        UINT64 HighWatermark,
        UINT64 RemlockSize){
  unsigned int v5; 
  unsigned int v6; 
  unsigned int v7; 
  CHAR *Surrogate; 
  INT64 v10; 
  int v11; 
  CHAR *v12; 
  UINT64 *v13; 
  _IO_REMOVE_LOCK *v14; 
  UINT64 v15; 
  INT64 v16[2]; 
  *(_OWORD *)v16 = 0i64;
  v5 = HighWatermark;
  v6 = MaxLockedMinutes;
  v7 = AllocateTag;
  if( !ViRemLockInitialized )
    goto LABEL_14;
  Surrogate = ViRemLockFindSurrogate();
  if( Surrogate )
  {
    if( (MmVerifierData & 0x10) != 0 )
      VerifierBugCheckIfAppropriate(0xC4ui64, 0xD7ui64, (UINT64)(Surrogate + 16), (UINT64)PublicLock, 0i64, v15);
    _InterlockedAdd(&ViRemLockReusedCount, 1u);
    v10 = (unsigned int)RemlockSize;
    ViRemLockDeleteFirstTreeNode(PublicLock, (unsigned int)RemlockSize);
  }
  else
  {
    v10 = (unsigned int)RemlockSize;
  }
  v11 = 0;
  if( (MmVerifierData & 0x10) == 0 )
    goto LABEL_14;
  v12 = VfAvlReserveNode((INT64)&ViRemLockAvl, (INT64)PublicLock, v10);
  v13 = (UINT64 *)v12;
  if( !v12 )
  {
    _InterlockedExchange(&ViRemLockAllocationFailures, 1);
LABEL_14:
    pXdvIoInitializeRemoveLockEx(PublicLock, v7, v6, v5, (unsigned int)RemlockSize);
    return;
  }
  v14 = (_IO_REMOVE_LOCK *)(v12 + 16);
  if( (_DWORD)RemlockSize == 120 )
  {
    memset((INT64)v14, 0i64);
  }
  else
  {
    pXdvIoInitializeRemoveLockEx(v14, v7, v6, v5, 120);
    v11 = 1;
  }
  VfAvlInitializeLockContext((INT64)v16, 0i64);
  VfAvlInsertReservedTreeNode((INT64)&ViRemLockAvl, (INT64)v16, v13);
  VfAvlCleanupLockContext((INT64)v16);
  if( !v11 )
    goto LABEL_14;
}

Referenced by:

No references.