HvlpGetEncryptedDataFromHypervisor
INT64 __fastcall HvlpGetEncryptedDataFromHypervisor(INT64 a1, CHAR *a2, UINT64 a3, INT64 *a4, INT64 a5){
_DWORD *v5;
unsigned int v7;
unsigned int v10;
__int64 v11;
unsigned int v12;
unsigned int v13;
__int64 v14;
INT64 v15;
unsigned __int64 v16;
unsigned __int64 v17;
__int64 v18;
unsigned __int64 v19;
unsigned int v20;
int v21;
v21 = HIDWORD(a1);
v5 = (_DWORD *)a5;
v18 = 0i64;
v20 = 0;
v7 = a3;
*(_DWORD *)a5 = 0;
if( (HvlpRootFlags & 4) == 0 )
return 3221226021i64;
if( !(_BYTE)HvlpCrashdumpIterationState )
{
HvlpStartPageListIteration(1i64);
*((_QWORD *)&HvlpCrashdumpIterationState + 1) = -1i64;
LODWORD(xmmword_140C47310) = 0;
LOBYTE(HvlpCrashdumpIterationState) = 1;
}
v10 = xmmword_140C47310;
if( (_DWORD)xmmword_140C47310 )
{
v11 = *((_QWORD *)&HvlpCrashdumpIterationState + 1);
v18 = *((_QWORD *)&HvlpCrashdumpIterationState + 1);
v20 = xmmword_140C47310;
}
else
{
if( !(unsigned int)HvlpGetPageList((int)xmmword_140C47310 + 1, &v18, &v20) )
{
qword_140C471E8 = 0i64;
HvlpIteratorCrashdump = 0;
LOBYTE(HvlpCrashdumpIterationState) = 0;
*((_QWORD *)&HvlpCrashdumpIterationState + 1) = -1i64;
LODWORD(xmmword_140C47310) = 0;
return 3221226021i64;
}
v11 = v18;
v10 = v20;
}
v12 = v7 >> 12;
v13 = v10;
if( v12 < v10 )
v13 = v12;
if( v13 )
{
v14 = v11 << 12;
v15 = v11;
a5 = v13;
do
{
v19 = v14 & 0xFFFFFFFFF000i64 | 0x8000000000000001ui64;
*((_QWORD *)MmGetPteBase() + (((unsigned __int64)qword_140C472E8 >> 12) & 0xFFFFFFFFFi64)) = v19;
v16 = __readcr4();
if( (v16 & 0x20080) != 0 )
{
__writecr4(v16 ^ 0x80);
__writecr4(v16);
}
else
{
v17 = __readcr3();
__writecr3(v17);
}
memmove((UINT8 *)a2, qword_140C472E8, 0x1000ui64);
*a4 = v15;
a2 += 4096;
v14 += 4096i64;
++a4;
++v15;
--a5;
}
while( a5 );
}
*v5 = v13 << 12;
LODWORD(xmmword_140C47310) = v10 - v13;
*((_QWORD *)&HvlpCrashdumpIterationState + 1) = v11 + v13;
return 0i64;
}Referenced by:
HvlGetEncryptedData