ViDeadlockAddThread
_VI_DEADLOCK_THREAD *__stdcall ViDeadlockAddThread(unsigned __int64 Thread, VOID *ReservedThread){
_VI_DEADLOCK_THREAD *result;
_VF_ADDRESS_RANGE *v5;
_QWORD *v7;
unsigned __int64 v8;
__int64 v9;
__int64 v10;
__int64 v11;
_VI_DEADLOCK_THREAD *v12;
result = 0i64;
if( ReservedThread )
{
v5 = (_VF_ADDRESS_RANGE *)ViDeadlockGlobals;
*((_QWORD *)ReservedThread + 1) = 0i64;
*((_QWORD *)ReservedThread + 2) = 0i64;
*((_DWORD *)ReservedThread + 10) = 0;
*((_DWORD *)ReservedThread + 11) = 0;
*((_BYTE *)ReservedThread + 48) = 0;
*(_QWORD *)ReservedThread = Thread;
v7 = (char *)ReservedThread + 24;
v8 = (Thread >> 12) % 0x3FF;
v9 = (__int64)&v5[1025].Start[16 * v8];
v10 = *(_QWORD *)v9;
if( *(_QWORD *)(*(_QWORD *)v9 + 8i64) != v9 )
__fastfail(3u);
*v7 = v10;
*((_QWORD *)ReservedThread + 4) = v9;
*(_QWORD *)(v10 + 8) = v7;
*(_QWORD *)v9 = v7;
VfUtilAddressRangeAdd(&v5[v8 + 1026], (UINT8 *)Thread, 0x898ui64);
++*(_QWORD *)(v11 + 16408);
return v12;
}
return result;
}Referenced by:
VfDeadlockAcquireResource
VfDeadlockBeforeCallDriver