ViDeadlockCertify
UINT64 __stdcall ViDeadlockCertify(VOID *Caller, _VI_DEADLOCK_NODE *AcquiredNode){
__int64 v3;
int *v4;
int v5;
int v6;
int v7;
unsigned int v8;
__int64 v9;
_QWORD *v10;
__int64 v11;
_QWORD *v12;
if( !VfWin32kDllBase
|| VfWin32kDllBase > (unsigned __int64)Caller
|| VfWin32kDllBase + (unsigned __int64)(unsigned int)VfWin32kSizeOfImage <= (unsigned __int64)Caller
|| !AcquiredNode->ThreadEntry->ThreadUsesEresources )
{
LODWORD(v3) = *((_DWORD *)ViDeadlockGlobals + 8216);
if( (unsigned int)v3 < 3
|| (((v4 = *(int **)(*((_QWORD *)ViDeadlockGlobals + 4110) + 56i64),
v5 = **(_DWORD **)(*((_QWORD *)ViDeadlockGlobals + 4109) + 56i64),
v5 != 5)
|| (v6 = *v4, *v4 != 6))
&& ((v7 = *v4, *v4 != 5) || (v6 = 5, v7 = 5, v5 != 6))
|| (!VfTcpIpDllBase
|| VfTcpIpDllBase > (unsigned __int64)Caller
|| VfTcpIpDllBase + (unsigned __int64)(unsigned int)VfTcpIpSizeOfImage <= (unsigned __int64)Caller)
&& (!VfTdxDllBase
|| VfTdxDllBase > (unsigned __int64)Caller
|| VfTdxDllBase + (unsigned __int64)(unsigned int)VfTdxSizeOfImage <= (unsigned __int64)Caller)
&& ((v7 = v6, !VfMrxsmbDllBase)
|| VfMrxsmbDllBase > (unsigned __int64)Caller
|| VfMrxsmbDllBase + (unsigned __int64)(unsigned int)VfMrxsmbSizeOfImage <= (unsigned __int64)Caller))
&& (v5 != 1
|| v7 != 1
|| (!VfTmDllBase
|| VfTmDllBase > (unsigned __int64)Caller
|| VfTmDllBase + (unsigned __int64)(unsigned int)VfTmSizeOfImage <= (unsigned __int64)Caller)
&& (!VfKsDllBase
|| VfKsDllBase > (unsigned __int64)Caller
|| VfKsDllBase + (unsigned __int64)(unsigned int)VfKsSizeOfImage <= (unsigned __int64)Caller)) )
{
v8 = 1;
if( (unsigned int)v3 <= 1 )
{
LABEL_31:
if( (unsigned int)v3 <= 1 )
return 1i64;
while( 1 )
{
v3 = (unsigned int)(v3 - 1);
v10 = (_QWORD *)**((_QWORD **)ViDeadlockGlobals + v3 + 4109);
if( v10 )
break;
LABEL_39:
if( (unsigned int)v3 <= 1 )
return 1i64;
}
while( 1 )
{
LODWORD(v11) = v3 - 1;
if( (_DWORD)v3 != 1 )
break;
LABEL_38:
v10 = (_QWORD *)*v10;
if( !v10 )
goto LABEL_39;
}
while( 1 )
{
v11 = (unsigned int)(v11 - 1);
v12 = (_QWORD *)**((_QWORD **)ViDeadlockGlobals + v11 + 4109);
if( v12 )
break;
LABEL_37:
if( !(_DWORD)v11 )
goto LABEL_38;
}
while( *(_QWORD *)(v12[7] + 8i64) != *(_QWORD *)(v10[7] + 8i64) )
{
v12 = (_QWORD *)*v12;
if( !v12 )
goto LABEL_37;
}
++*((_DWORD *)ViDeadlockGlobals + 8207);
}
else
{
while( 1 )
{
v9 = *((_QWORD *)ViDeadlockGlobals + v8 + 4108);
if( *(_QWORD *)(*(_QWORD *)(*((_QWORD *)ViDeadlockGlobals + v8 + 4109) + 56i64) + 8i64) == *(_QWORD *)(*(_QWORD *)(v9 + 56) + 8i64)
&& (*(_DWORD *)(v9 + 72) & 2) != 0 )
{
break;
}
if( ++v8 >= (unsigned int)v3 )
goto LABEL_31;
}
}
}
}
return 0i64;
}Referenced by:
ViDeadlockAnalyze