HvlpStartSecurePageListIteration
INT64 __fastcall HvlpStartSecurePageListIteration(INT64 a1, UINT64 a2, CHAR *a3, VOID *a4, UINT64 a5, LONGLONG **a6){
int v6;
int v8;
INT64 *v9;
INT64 result;
LONGLONG **v11;
LONGLONG *v12;
unsigned int v13;
__int128 v14;
INT64 v15;
LONGLONG v16;
unsigned int v17;
CHAR *v18;
__int64 v19;
PHYSICAL_ADDRESS PhysicalAddress;
PHYSICAL_ADDRESS v21;
int *v22;
UINT64 v23;
__int64 v24;
v6 = a2;
v8 = a1;
v9 = HvlpSetupPageListIteration(a1, 1);
if( !v9 )
return 3221225473i64;
v11 = a6;
v12 = (LONGLONG *)v9[1];
v13 = 0;
v14 = v9[2];
*a6 = v12;
v24 = v14 / 4096;
v15 = v24;
v16 = 0i64;
if( a3 )
{
v17 = 0x200000;
v18 = a3;
if( (unsigned int)a5 <= 0x200000 )
v17 = a5;
v13 = v17 >> 12;
if( v13 )
{
v19 = v13;
do
{
PhysicalAddress = MmGetPhysicalAddress(v18);
v18 += 4096;
*v12++ = PhysicalAddress.QuadPart / 4096;
--v19;
}
while( v19 );
v11 = a6;
v15 = v24;
}
v21 = MmGetPhysicalAddress(a4);
*v11 = (LONGLONG *)a3;
v16 = v21.QuadPart / 4096;
}
LODWORD(v23) = v6;
result = VslStartSecurePageIteration(v8 == 0, v15, v16, v13, v23);
if( (int)result < 0 )
{
v22 = &HvlpIteratorCrashdump;
if( !v8 )
v22 = &HvlpIteratorHibernate;
*v22 = 0;
*((_QWORD *)v22 + 1) = 0i64;
}
return result;
}Referenced by:
HvlAddSecurePagesCallbackRoutine
HvlDiscardSecurePagesFromHibernation
HvlIterateSecurePagesForHibernation
HvlpGetEncryptedDataFromSecureKernel