IvmdFindDeviceEntry

_OWORD *__fastcall IvmdFindDeviceEntry(INT64 a1, INT16 a2){
  INT64 v2; 
  _OWORD *result; 
  INT64 v6; 
  INT64 *v7; 
  INT64 v8; 
  v8 = 0i64;
  v2 = a1 + 8;
  for( result = *(_OWORD **)(a1 + 8); result != (_OWORD *)v2; result = *(_OWORD **)result )
  {
    v8 = (INT64)result;
    if( *((_WORD *)result + 8) == a2 )
      return result;
  }
  if( (int)ExtEnvAllocateMemory(a1, 0x28ui64, &v8) < 0 )
    return 0i64;
  v6 = v8;
  *(_OWORD *)v8 = 0i64;
  *(_OWORD *)(v6 + 16) = 0i64;
  *(_QWORD *)(v6 + 32) = 0i64;
  *(_WORD *)(v6 + 16) = a2;
  *(_DWORD *)(v6 + 20) = 0;
  *(_QWORD *)(v6 + 32) = v6 + 24;
  *(_QWORD *)(v6 + 24) = v6 + 24;
  v7 = *(INT64 **)(v2 + 8);
  if( *v7 != v2 )
    __fastfail(3u);
  *(_QWORD *)(v6 + 8) = v7;
  *(_QWORD *)v6 = v2;
  *v7 = v6;
  result = (_OWORD *)v6;
  *(_QWORD *)(v2 + 8) = v6;
  ++*(_DWORD *)a1;
  return result;
}

Referenced by:

HsaProcessIvmd