FsRtlCheckNoExclusiveConflict
CHAR __fastcall FsRtlCheckNoExclusiveConflict(
INT64 a1,
LARGE_INTEGER *a2,
LARGE_INTEGER *a3,
INT64 a4,
INT64 a5,
INT64 a6){
int v7;
CHAR v10;
RTL_SPLAY_LINKS *v11;
RTL_SPLAY_LINKS *v12;
unsigned __int64 QuadPart;
INT64 v15;
INT64 v16;
PRTL_SPLAY_LINKS Links;
Links = 0i64;
v7 = a4;
v10 = 1;
FsRtlFindFirstOverlappingExclusiveNode(*(_RTL_SPLAY_LINKS **)(a1 + 16), a2, a3, &Links, 0i64);
v12 = v11;
if( v11 )
{
QuadPart = a3->QuadPart;
v15 = a6;
v16 = a5;
while( (_RTL_SPLAY_LINKS *)QuadPart >= v12[1].Parent )
{
if( (_RTL_SPLAY_LINKS *)a2->QuadPart <= v12[2].RightChild
&& (v12[2].Parent != (_RTL_SPLAY_LINKS *)v16
|| v12[2].LeftChild != (_RTL_SPLAY_LINKS *)v15
|| HIDWORD(v12[1].RightChild) != v7) )
{
v10 = 0;
break;
}
v12 = RtlRealSuccessor(v12);
if( !v12 )
break;
}
}
if( Links )
*(_QWORD *)(a1 + 16) = RtlSplay(Links);
return v10;
}Referenced by:
FsRtlFastCheckLockForRead
FsRtlFastCheckLockForWrite