IovUtilRelateDeviceObjects

void __fastcall IovUtilRelateDeviceObjects(__int64 a1, __int64 a2, _DWORD *a3){
  __int64 v5; 
  KIRQL v6; 
  __int64 v7; 
  v5 = a1;
  if( a1 == a2 )
  {
    *a3 = 0;
  }
  else
  {
    v6 = KeAcquireQueuedSpinLock(0xAui64);
    if( v5 == *(_QWORD *)(a2 + 24) )
    {
      *a3 = 1;
    }
    else
    {
      v7 = *(_QWORD *)(v5 + 24);
      if( v7 == a2 )
      {
        *a3 = 2;
      }
      else
      {
        do
        {
          if( v5 == a2 )
            break;
          v5 = *(_QWORD *)(*(_QWORD *)(v5 + 312) + 48i64);
        }
        while( v5 );
        if( v5 )
        {
          *a3 = 3;
        }
        else
        {
          while( v7 && v7 != a2 )
            v7 = *(_QWORD *)(v7 + 24);
          *a3 = 5 - (v7 != 0);
        }
      }
    }
    KeReleaseQueuedSpinLock(0xAui64, v6);
  }
}

Referenced by:

IovpExamineDevObjForwarding