ViDeadlockAddThread

_VI_DEADLOCK_THREAD *__fastcall ViDeadlockAddThread(unsigned __int64 Thread, VOID *ReservedThread){
  _VI_DEADLOCK_THREAD *result; 
  _QWORD *v5; 
  _QWORD *v7; 
  unsigned __int64 v8; 
  __int64 v9; 
  __int64 v10; 
  __int64 v11; 
  _VI_DEADLOCK_THREAD *v12; 
  result = 0i64;
  if( ReservedThread )
  {
    v5 = 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 = v5[2050] + 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[2 * v8 + 2052], Thread, 2200i64);
    ++*(_QWORD *)(v11 + 16408);
    return v12;
  }
  return result;
}

Referenced by:

VfDeadlockAcquireResource
VfDeadlockBeforeCallDriver