HvlpInitializeSvmIommuSupport

INT64 __stdcall HvlpInitializeSvmIommuSupport(){
  int v0; 
  VOID *PoolWithTag; 
  __int64 v2; 
  unsigned int v4; 
  __int64 v5; 
  __int128 v6; 
  __int64 v7; 
  v6 = 0i64;
  v7 = 0i64;
  HvlSvmGetSystemCapabilities((INT64)&v6);
  if( (v6 & 1) == 0 )
    return 3221225659i64;
  v0 = v7;
  if( !(_DWORD)v7 )
    return 3221225659i64;
  PoolWithTag = ExAllocatePoolWithTag(NonPagedPoolNx, 104i64 * (unsigned int)v7, 0x204C5648ui64);
  qword_140CF6288 = (__int64)PoolWithTag;
  v2 = (__int64)PoolWithTag;
  if( !PoolWithTag )
    return 3221225626i64;
  memset((INT64)PoolWithTag, 0i64);
  dword_140CF6284 = v0;
  v4 = 0;
  if( v0 )
  {
    while( 1 )
    {
      v5 = v2 + 104i64 * v4;
      *(_DWORD *)v5 = v4;
      *(_QWORD *)(v5 + 32) = HvlpIommuPrqDpcRoutine;
      *(_DWORD *)(v5 + 8) = 275;
      *(_QWORD *)(v5 + 40) = v5;
      *(_QWORD *)(v5 + 64) = 0i64;
      *(_QWORD *)(v5 + 24) = 0i64;
      *(_QWORD *)(v5 + 96) = v5;
      *(_QWORD *)(v5 + 88) = HvlpProcessIommuPrq;
      *(_QWORD *)(v5 + 72) = 0i64;
      *(_DWORD *)(v5 + 4) = 3;
      ExQueueWorkItem((WORK_QUEUE_ITEM *)(v5 + 72), HyperCriticalWorkQueue);
      if( ++v4 >= dword_140CF6284 )
        break;
      v2 = qword_140CF6288;
    }
  }
  return 0i64;
}

Referenced by:

HvlPhase2Initialize