HvlpInitializeSvmIommuSupport
INT64 __stdcall HvlpInitializeSvmIommuSupport(){
int v0;
VOID *PoolWithTag;
__int64 v2;
unsigned int v4;
__int64 v5;
__int128 v6;
__int64 v7;
v6 = 0i64;
v7 = 0i64;
HvlSvmGetSystemCapabilities((INT64)&v6);
if( (v6 & 1) == 0 )
return 3221225659i64;
v0 = v7;
if( !(_DWORD)v7 )
return 3221225659i64;
PoolWithTag = ExAllocatePoolWithTag(NonPagedPoolNx, 104i64 * (unsigned int)v7, 0x204C5648ui64);
qword_140CF6288 = (__int64)PoolWithTag;
v2 = (__int64)PoolWithTag;
if( !PoolWithTag )
return 3221225626i64;
memset((INT64)PoolWithTag, 0i64);
dword_140CF6284 = v0;
v4 = 0;
if( v0 )
{
while( 1 )
{
v5 = v2 + 104i64 * v4;
*(_DWORD *)v5 = v4;
*(_QWORD *)(v5 + 32) = HvlpIommuPrqDpcRoutine;
*(_DWORD *)(v5 + 8) = 275;
*(_QWORD *)(v5 + 40) = v5;
*(_QWORD *)(v5 + 64) = 0i64;
*(_QWORD *)(v5 + 24) = 0i64;
*(_QWORD *)(v5 + 96) = v5;
*(_QWORD *)(v5 + 88) = HvlpProcessIommuPrq;
*(_QWORD *)(v5 + 72) = 0i64;
*(_DWORD *)(v5 + 4) = 3;
ExQueueWorkItem((WORK_QUEUE_ITEM *)(v5 + 72), HyperCriticalWorkQueue);
if( ++v4 >= dword_140CF6284 )
break;
v2 = qword_140CF6288;
}
}
return 0i64;
}Referenced by:
HvlPhase2Initialize