IvtUpdateRemappingTableEntry

CHAR __fastcall IvtUpdateRemappingTableEntry(INT64 a1, CHAR a2, UINT64 a3, _DWORD *a4){
  ULONG_PTR *v5; 
  int v6; 
  CHAR v7; 
  unsigned __int64 v9; 
  ULONG_PTR v10; 
  ULONG_PTR v11; 
  ULONG_PTR BugCheckParameter3; 
  ULONG_PTR v13; 
  ULONG_PTR BugCheckParameter4; 
  ULONG_PTR v15; 
  v5 = (ULONG_PTR *)(*(_QWORD *)(a1 + 240) + 16i64 * (unsigned int)a3);
  if( (*v5 & 1) == 0 && (a4[3] & 0x10) == 0 )
    return 0;
  v6 = a4[3];
  v7 = 0;
  BugCheckParameter3 = 0i64;
  v13 = 0i64;
  if( (v6 & 0x10) != 0 )
  {
    switch( a4[5] )
    {
      case 1:
        v10 = BugCheckParameter3;
        if( (v6 & 2) != 0 )
        {
          BugCheckParameter3 = BugCheckParameter3 & 0xFFFFFFFFFFFFFF1Fui64 | 0x20;
          v9 = v10 & 0xFFFFFFFFFFFFFF17ui64 | 0x28;
        }
        else
        {
          v9 = BugCheckParameter3;
        }
        break;
      case 2:
        v9 = BugCheckParameter3 & 0xFFFFFFFFFFFFFF1Fui64 | 0x80;
        break;
      case 3:
        v9 = BugCheckParameter3 & 0xFFFFFFFFFFFFFF1Fui64 | 0x40;
        break;
      default:
        return 0;
    }
    BugCheckParameter3 = v9;
    if( (a4[3] & 0x10) != 0 )
      BugCheckParameter3 |= 1ui64;
    if( a4[2] == 1 )
      v11 = BugCheckParameter3 & 0xFFFFFFFFFFFFFFEFui64;
    else
      v11 = BugCheckParameter3 | 0x10;
    BugCheckParameter3 = v11;
    BugCheckParameter3 = ((unsigned __int64)(unsigned __int8)a4[12] << 16) | v11 & 0xFFFFFFFFFF00FFFFui64;
    if( a2 )
      BugCheckParameter3 |= 0x100ui64;
    IvtUpdateInterruptDestination(&BugCheckParameter3, a4 + 6);
  }
  if( (*v5 & 1) != 0 && (BugCheckParameter3 & 1) != 0 )
  {
    BugCheckParameter4 = BugCheckParameter3 ^ *v5;
    v15 = v13 ^ v5[1];
    BugCheckParameter4 = (unsigned int)BugCheckParameter4;
    if( (_DWORD)BugCheckParameter4 || v15 )
      KeBugCheckEx(0x5Cu, 0x7000ui64, 0x20ui64, (ULONG_PTR)v5, (ULONG_PTR)&BugCheckParameter4);
  }
  if( *v5 != BugCheckParameter3 || v5[1] != v13 )
  {
    v7 = 1;
    v5[1] = v13;
    *v5 = BugCheckParameter3;
  }
  return v7;
}

Referenced by:

No references.