HvlAddSecurePagesCallbackRoutine
INT64 HvlAddSecurePagesCallbackRoutine(void){
int v0;
int v1;
INT64 v2;
unsigned __int8 v3;
INT64 v4;
int v5;
INT64 result;
__int64 *v7;
__int64 v8;
char v9;
char v10;
UINT64 v11;
int a4;
LONGLONG *v13;
a4 = v0;
v13 = 0i64;
v3 = v1 | 4;
*(_QWORD *)(v2 + 24) = 0i64;
v4 = v2;
*(_DWORD *)(v2 + 8) = 0;
v5 = v1;
LOBYTE(result) = IoIsPartialDumpRetry();
v8 = *v7;
v9 = result;
if( !*v7 )
goto LABEL_5;
if( BYTE3(HvlpCrashdumpIterationState) != v3 )
{
result = (INT64)HvlpEndSecurePageListIteration(1i64, 0);
LOBYTE(HvlpCrashdumpIterationState) = 0;
v8 = 0i64;
*(_QWORD *)v4 = 0i64;
}
if( !v8 )
{
LABEL_5:
HvlpCrashdumpIterationState = 0i64;
LODWORD(v11) = 0;
xmmword_140C47310 = 0i64;
xmmword_140C47320 = 0i64;
result = HvlpStartSecurePageListIteration(1i64, v3, 0i64, 0i64, v11, &v13);
if( (int)result < 0 )
return result;
*((_QWORD *)&xmmword_140C47320 + 1) = v13;
result = (INT64)&HvlpCrashdumpIterationState;
BYTE3(HvlpCrashdumpIterationState) = v3;
LOBYTE(HvlpCrashdumpIterationState) = 1;
*(_QWORD *)v4 = &HvlpCrashdumpIterationState;
}
if( (_BYTE)HvlpCrashdumpIterationState )
{
if( BYTE1(HvlpCrashdumpIterationState) || (LOBYTE(result) = HvlpAddCrashdumpAreaPages(v4, 1), !(_BYTE)result) )
{
if( BYTE2(HvlpCrashdumpIterationState) || (LOBYTE(result) = HvlpAddCrashdumpAreaPages(v4, 0), !(_BYTE)result) )
{
if( !v9 || v5 == 1 && *(_DWORD *)(v4 + 12) == 395 || v5 == 2 && *(_DWORD *)(v4 + 12) == 131073 )
{
while( (_DWORD)xmmword_140C47320 )
{
LABEL_22:
*(_QWORD *)(v4 + 24) = (**((_QWORD **)&xmmword_140C47310 + 1) >> 40) + 1i64;
result = 0xFFFFFFFFFFi64;
*(_QWORD *)(v4 + 16) = **((_QWORD **)&xmmword_140C47310 + 1) & 0xFFFFFFFFFFi64;
*((_QWORD *)&xmmword_140C47310 + 1) += 8i64;
LODWORD(xmmword_140C47320) = xmmword_140C47320 - 1;
if( *(_QWORD *)(v4 + 24) )
{
*(_DWORD *)(v4 + 8) = -2147483646;
if( v5 == 1 )
*(_DWORD *)(v4 + 8) = -2147483630;
else
*(_DWORD *)(v4 + 8) = -2147483614;
return result;
}
}
while( 1 )
{
LOBYTE(a4) = 0;
if( VslGetSecurePageList(0, 0i64, 0i64, &a4) < 0 )
break;
LODWORD(xmmword_140C47320) = *(unsigned __int16 *)(*((_QWORD *)&xmmword_140C47320 + 1) + 8i64);
*((_QWORD *)&xmmword_140C47310 + 1) = *((_QWORD *)&xmmword_140C47320 + 1) + 16i64;
if( (_DWORD)xmmword_140C47320 )
goto LABEL_22;
}
}
result = (INT64)HvlpEndSecurePageListIteration(1i64, 0);
LOBYTE(HvlpCrashdumpIterationState) = 0;
}
else
{
BYTE2(HvlpCrashdumpIterationState) = 1;
}
}
else
{
BYTE1(HvlpCrashdumpIterationState) = v10;
}
}
return result;
}Referenced by:
HvlAddSecureHvPagesCallbackRoutine
HvlAddSecureSkPagesCallbackRoutine