HvlpInitializeSvmIommuSupport
NTSTATUS __stdcall HvlpInitializeSvmIommuSupport(
INT64 a1,
INT64 a2,
INT64 a3,
INT64 a4,
UINT8 *FreeWhenDone2,
_UNICODE_STRING *ResultantString3,
UINT8 *FreeWhenDone3){
int v7;
VOID **PoolWithTag;
__int64 v9;
unsigned int v11;
__int64 v12;
__int128 v13;
__int64 v14;
v13 = 0i64;
v14 = 0i64;
HvlSvmGetSystemCapabilities((INT64)&v13);
if( (v13 & 1) == 0 )
return -1073741637;
v7 = v14;
if( !(_DWORD)v14 )
return -1073741637;
PoolWithTag = ExAllocatePoolWithTag(0x200ui64, 104i64 * (unsigned int)v14, 541873736i64);
qword_140CF6288 = (__int64)PoolWithTag;
v9 = (__int64)PoolWithTag;
if( !PoolWithTag )
return -1073741670;
memset(PoolWithTag, 0i64, 104 * v7);
dword_140CF6284 = v7;
v11 = 0;
if( v7 )
{
while( 1 )
{
v12 = v9 + 104i64 * v11;
*(_DWORD *)v12 = v11;
*(_QWORD *)(v12 + 32) = HvlpIommuPrqDpcRoutine;
*(_DWORD *)(v12 + 8) = 275;
*(_QWORD *)(v12 + 40) = v12;
*(_QWORD *)(v12 + 64) = 0i64;
*(_QWORD *)(v12 + 24) = 0i64;
*(_QWORD *)(v12 + 96) = v12;
*(_QWORD *)(v12 + 88) = HvlpProcessIommuPrq;
*(_QWORD *)(v12 + 72) = 0i64;
*(_DWORD *)(v12 + 4) = 3;
ExQueueWorkItem((PWORK_QUEUE_ITEM)(v12 + 72), HyperCriticalWorkQueue);
if( ++v11 >= dword_140CF6284 )
break;
v9 = qword_140CF6288;
}
}
return 0;
}Referenced by:
HvlPhase2Initialize