ViDeadlockSearchThread
_VI_DEADLOCK_THREAD *__stdcall ViDeadlockSearchThread(unsigned __int64 Thread){
unsigned __int64 v2;
_QWORD *v3;
_QWORD *v4;
__int64 v5;
_VI_DEADLOCK_THREAD *result;
v2 = (Thread >> 12) % 0x3FF;
v3 = (_QWORD *)(*((_QWORD *)ViDeadlockGlobals + 2050) + 16 * v2);
if( (_QWORD *)*v3 == v3
|| !(unsigned int)VfUtilAddressRangeFit(
(_VF_ADDRESS_RANGE *)ViDeadlockGlobals + v2 + 1026,
(UINT8 *)Thread,
(UINT8 *)(Thread + 1)) )
{
return 0i64;
}
while( 1 )
{
result = (_VI_DEADLOCK_THREAD *)(v4 - 3);
if( *(v4 - 3) == v5 )
break;
v4 = (_QWORD *)*v4;
if( v4 == v3 )
return 0i64;
}
return result;
}Referenced by:
VfDeadlockAcquireResource
VfDeadlockAfterCallDriver
VfDeadlockBeforeCallDriver
VfDeadlockReleaseResource
ViIsThreadInsidePagingCodePaths