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