FsRtlFindFirstOverlappingExclusiveNode
VOID __stdcall FsRtlFindFirstOverlappingExclusiveNode(
_RTL_SPLAY_LINKS *Tree,
_LARGE_INTEGER *StartingByte,
_LARGE_INTEGER *EndingByte,
_RTL_SPLAY_LINKS **LastEdgeNode,
UINT8 *GreaterThan){
_RTL_SPLAY_LINKS *RightChild;
_RTL_SPLAY_LINKS *QuadPart;
_RTL_SPLAY_LINKS *Parent;
if( LastEdgeNode )
*LastEdgeNode = 0i64;
if( GreaterThan )
*GreaterThan = 0;
while( Tree )
{
RightChild = Tree[2].RightChild;
QuadPart = (_RTL_SPLAY_LINKS *)StartingByte->QuadPart;
if( (unsigned __int64)RightChild < StartingByte->QuadPart
|| (Parent = Tree[1].Parent, *(_OWORD *)&Tree[1].Parent == 0i64) )
{
if( RightChild == (_RTL_SPLAY_LINKS *)EndingByte->QuadPart && Tree[1].Parent == QuadPart )
{
if( LastEdgeNode )
*LastEdgeNode = Tree;
if( GreaterThan )
*GreaterThan = 0;
goto LABEL_22;
}
if( LastEdgeNode )
*LastEdgeNode = Tree;
if( GreaterThan )
*GreaterThan = 0;
Tree = Tree->RightChild;
}
else
{
if( (unsigned __int64)Parent <= EndingByte->QuadPart
&& (EndingByte->QuadPart != -1 || QuadPart)
&& Parent <= QuadPart )
{
return;
}
if( LastEdgeNode )
*LastEdgeNode = Tree;
if( GreaterThan )
*GreaterThan = 1;
LABEL_22:
Tree = Tree->LeftChild;
}
}
}Referenced by:
FsRtlCheckNoExclusiveConflict
FsRtlFastUnlockSingleExclusive
FsRtlGetNextFileLock
FsRtlPrivateCheckForExclusiveLockAccess
FsRtlPrivateCheckForSharedLockAccess
FsRtlPrivateInsertExclusiveLock