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.