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