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