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.