VerifierIoInitializeRemoveLockEx

VOID __stdcall VerifierIoInitializeRemoveLockEx(
        _IO_REMOVE_LOCK *PublicLock,
        UINT64 AllocateTag,
        UINT64 MaxLockedMinutes,
        UINT64 HighWatermark,
        UINT64 RemlockSize){
  unsigned int v5; 
  unsigned int v6; 
  unsigned int v7; 
  _VI_REMLOCK_SURROGATE *Surrogate; 
  UINT64 v10; 
  int v11; 
  _VF_AVL_TREE_NODE *v12; 
  _VF_AVL_TREE_NODE *v13; 
  _VF_AVL_TREE_NODE *v14; 
  UINT64 v15; 
  __int128 Context; 

  Context = 0i64;
  v5 = HighWatermark;
  v6 = MaxLockedMinutes;
  v7 = AllocateTag;
  if( !ViRemLockInitialized )
    goto LABEL_14;
  Surrogate = ViRemLockFindSurrogate(PublicLock);
  if( Surrogate )
  {
    if( (MmVerifierData & 0x10) != 0 )
      VerifierBugCheckIfAppropriate(0xC4ui64, 0xD7u, (_DWORD)Surrogate + 16, (ULONG_PTR)PublicLock, 0, 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(&ViRemLockAvl, PublicLock, v10);
  v13 = v12;
  if( !v12 )
  {
    _InterlockedExchange(&ViRemLockAllocationFailures, 1);
LABEL_14:
    ((void(__fastcall *)(_IO_REMOVE_LOCK *, _QWORD, _QWORD, _QWORD, _DWORD))pXdvIoInitializeRemoveLockEx)(
      PublicLock,
      v7,
      v6,
      v5,
      RemlockSize);
    return;
  }
  v14 = v12 + 1;
  if( (_DWORD)RemlockSize == 120 )
  {
    memset(v14, 0i64, 0x78u);
  }
  else
  {
    ((void(__fastcall *)(_VF_AVL_TREE_NODE *, _QWORD, _QWORD, _QWORD, int))pXdvIoInitializeRemoveLockEx)(
      v14,
      v7,
      v6,
      v5,
      120);
    v11 = 1;
  }
  VfAvlInitializeLockContext((_VF_AVL_LOCK_CONTEXT *)&Context, Exclusive);
  VfAvlInsertReservedTreeNode(&ViRemLockAvl, (_VF_AVL_LOCK_CONTEXT *)&Context, v13);
  VfAvlCleanupLockContext((_VF_AVL_LOCK_CONTEXT *)&Context);
  if( !v11 )
    goto LABEL_14;
}

Referenced by:

No references.