IvtUpdateGlobalCommand

INT64 __fastcall IvtUpdateGlobalCommand(INT64 a1, UINT64 a2, CHAR a3){
  ULONG_PTR v4; 
  int v5; 
  int v6; 
  unsigned int v7; 
  __int64 v8; 
  unsigned int v9; 
  INT64 result; 
  int v11[8]; 
  v4 = (unsigned int)a2;
  v5 = *(_DWORD *)(*(_QWORD *)(a1 + 8) + 28i64);
  v6 = 0;
  if( a3 )
    v7 = a2 | v5;
  else
    v7 = ~(_DWORD)a2 & v5;
  *(_DWORD *)(*(_QWORD *)(a1 + 8) + 24i64) = v7;
  _InterlockedOr(v11, 0);
  v8 = *(_QWORD *)(a1 + 8);
  while( 1 )
  {
    v9 = *(_DWORD *)(v8 + 28);
    result = (unsigned int)v4 & v9;
    if( (_DWORD)result == ((unsigned int)v4 & v7) )
      break;
    KeStallExecutionProcessor(1u);
    if( v6 == 100000 )
      KeBugCheckEx(0x5Cu, 0x500ui64, v4, v7, v9);
    v8 = *(_QWORD *)(a1 + 8);
    ++v6;
  }
  return result;
}

Referenced by:

IvtInitializeIommu