FsRtlPrivateCheckForExclusiveLockAccess
CHAR __fastcall FsRtlPrivateCheckForExclusiveLockAccess(INT64 a1, LARGE_INTEGER *a2){
RTL_SPLAY_LINKS *v4;
_RTL_SPLAY_LINKS *v5;
_RTL_SPLAY_LINKS *FirstOverlappingSharedNode;
RTL_SPLAY_LINKS *v7;
_RTL_SPLAY_LINKS *v8;
__int64 v10;
_QWORD *v11;
PRTL_SPLAY_LINKS Links;
v4 = 0i64;
Links = 0i64;
v5 = *(_RTL_SPLAY_LINKS **)(a1 + 8);
if( v5 )
{
FirstOverlappingSharedNode = FsRtlFindFirstOverlappingSharedNode(v5, a2, a2 + 5, &Links, 0i64);
if( FirstOverlappingSharedNode )
{
v11 = LOBYTE(FirstOverlappingSharedNode[-1].LeftChild) ? FsRtlFindFirstOverlapInNode(
&FirstOverlappingSharedNode[-1].Parent,
(unsigned __int64 *)&a2->QuadPart,
(unsigned __int64 *)&a2[5].QuadPart) : FirstOverlappingSharedNode[-1].Parent;
if( v11 && (a2[1].QuadPart || v11[2]) )
return 0;
}
v4 = Links;
if( Links )
{
v7 = RtlSplay(Links);
v4 = 0i64;
*(_QWORD *)(a1 + 8) = v7;
Links = 0i64;
}
}
v8 = *(_RTL_SPLAY_LINKS **)(a1 + 16);
if( v8 )
{
FsRtlFindFirstOverlappingExclusiveNode(v8, a2, a2 + 5, &Links, 0i64);
if( !v10 || !a2[1].QuadPart && !*(_QWORD *)(v10 + 32) )
{
v4 = Links;
goto LABEL_6;
}
return 0;
}
LABEL_6:
if( v4 )
*(_QWORD *)(a1 + 16) = RtlSplay(v4);
return 1;
}Referenced by:
FsRtlPrivateCheckWaitingLocks
FsRtlPrivateLock