IommuSetAddressSpace
INT64 __fastcall IommuSetAddressSpace(INT64 a1, INT64 a2){
__int64 v2;
unsigned __int8 v4;
unsigned __int8 v5;
unsigned __int8 CurrentIrql;
_QWORD *v7;
_QWORD *v8;
_QWORD *v9;
__int64 v10;
__int64 v11;
unsigned __int8 v13;
v2 = *(_QWORD *)(a1 + 8);
if( a2 != *(_QWORD *)(v2 + 32) )
{
KeAcquireSpinLockRaiseToDpc(&IommupPasidTableLock, a2);
v5 = v4;
v13 = v4;
CurrentIrql = KeGetCurrentIrql();
__writecr8(0xFui64);
KxAcquireSpinLock((UINT64 *)(v2 + 24));
v7 = (_QWORD *)(v2 + 40);
*(_QWORD *)(v2 + 32) = a2;
v8 = *(_QWORD **)(v2 + 40);
if( v8 != (_QWORD *)(v2 + 40) )
{
do
{
v9 = (_QWORD *)v8[3];
if( v9 != v8 + 3 )
{
do
{
v10 = v9[5];
v11 = *(_QWORD *)(v10 + 24);
(*(void(__fastcall **)(_QWORD, _QWORD, _QWORD, INT64))(v11 + 224))(
*(_QWORD *)(v11 + 16),
*(_QWORD *)(v10 + 64),
*(unsigned int *)(v2 + 16),
a2);
(*(void(__fastcall **)(_QWORD, _QWORD, __int64, _QWORD, _DWORD, _QWORD))(v11 + 232))(
*(_QWORD *)(v11 + 16),
*(unsigned int *)(v2 + 16),
1i64,
v9[1],
0,
0i64);
v9 = (_QWORD *)*v9;
}
while( v9 != v8 + 3 );
v7 = (_QWORD *)(v2 + 40);
}
v8 = (_QWORD *)*v8;
}
while( v8 != v7 );
v5 = v13;
}
KxReleaseSpinLock((UINT64 *)(v2 + 24));
__writecr8(CurrentIrql);
KxReleaseSpinLock(&IommupPasidTableLock);
__writecr8(v5);
}
return 0i64;
}Referenced by:
No references.