FsRtlPrivateInsertExclusiveLock
VOID __stdcall FsRtlPrivateInsertExclusiveLock(_LOCK_QUEUE *LockQueue, PRTL_SPLAY_LINKS *NewLock){
_RTL_SPLAY_LINKS *FirstOverlappingExclusiveNode;
UINT8 v5;
_RTL_SPLAY_LINKS *v6;
v6 = 0i64;
v5 = 0;
FirstOverlappingExclusiveNode = FsRtlFindFirstOverlappingExclusiveNode(
*((_RTL_SPLAY_LINKS **)LockQueue + 2),
(_LARGE_INTEGER *)NewLock + 3,
(_LARGE_INTEGER *)NewLock + 8,
&v6,
&v5);
NewLock[1] = 0i64;
NewLock[2] = 0i64;
*NewLock = (PRTL_SPLAY_LINKS)NewLock;
if( !FirstOverlappingExclusiveNode )
{
FirstOverlappingExclusiveNode = v6;
if( !v6 )
{
*((_QWORD *)LockQueue + 2) = NewLock;
return;
}
if( !v5 )
goto LABEL_5;
LABEL_7:
FirstOverlappingExclusiveNode->LeftChild = (_RTL_SPLAY_LINKS *)NewLock;
goto LABEL_6;
}
if( FirstOverlappingExclusiveNode->RightChild )
{
if( FirstOverlappingExclusiveNode->LeftChild )
FirstOverlappingExclusiveNode = RtlRealSuccessor(FirstOverlappingExclusiveNode);
goto LABEL_7;
}
LABEL_5:
FirstOverlappingExclusiveNode->RightChild = (_RTL_SPLAY_LINKS *)NewLock;
LABEL_6:
*NewLock = FirstOverlappingExclusiveNode;
}Referenced by:
FsRtlPrivateInsertLock