HvlAddSecurePagesCallbackRoutine

NTSTATUS __stdcall HvlAddSecurePagesCallbackRoutine(){
  int v0; 
  int v1; 
  INT64 v2; 
  unsigned __int8 v3; 
  INT64 v4; 
  int v5; 
  __int128 *v6; 
  __int64 *v7; 
  __int64 v8; 
  char v9; 
  char v10; 
  UINT64 v12; 
  int v13; 
  _LONGLONG *v14; 

  v13 = v0;
  v14 = 0i64;
  v3 = v1 | 4;
  *(_QWORD *)(v2 + 24) = 0i64;
  v4 = v2;
  *(_DWORD *)(v2 + 8) = 0;
  v5 = v1;
  LOBYTE(v6) = IoIsPartialDumpRetry();
  v8 = *v7;
  v9 = (char)v6;
  if( !*v7 )
    goto LABEL_5;
  if( BYTE3(xmmword_140C47300) != v3 )
  {
    LODWORD(v6) = (unsigned int)HvlpEndSecurePageListIteration(1i64, 0);
    LOBYTE(xmmword_140C47300) = 0;
    v8 = 0i64;
    *(_QWORD *)v4 = 0i64;
  }
  if( !v8 )
  {
LABEL_5:
    xmmword_140C47300 = 0i64;
    LODWORD(v12) = 0;
    *(_OWORD *)&dword_140C47310 = 0i64;
    xmmword_140C47320 = 0i64;
    LODWORD(v6) = HvlpStartSecurePageListIteration(1i64, v3, 0i64, 0i64, v12, &v14);
    if( (int)v6 < 0 )
      return(int)v6;
    *((_QWORD *)&xmmword_140C47320 + 1) = v14;
    v6 = &xmmword_140C47300;
    BYTE3(xmmword_140C47300) = v3;
    LOBYTE(xmmword_140C47300) = 1;
    *(_QWORD *)v4 = &xmmword_140C47300;
  }
  if( (_BYTE)xmmword_140C47300 )
  {
    if( BYTE1(xmmword_140C47300) || (LOBYTE(v6) = HvlpAddCrashdumpAreaPages(v4, 1), !(_BYTE)v6) )
    {
      if( BYTE2(xmmword_140C47300) || (LOBYTE(v6) = HvlpAddCrashdumpAreaPages(v4, 0), !(_BYTE)v6) )
      {
        if( !v9 || v5 == 1 && *(_DWORD *)(v4 + 12) == 395 || v5 == 2 && *(_DWORD *)(v4 + 12) == 131073 )
        {
          while( (_DWORD)xmmword_140C47320 )
          {
LABEL_22:
            *(_QWORD *)(v4 + 24) = (*qword_140C47318 >> 40) + 1i64;
            LODWORD(v6) = -1;
            *(_QWORD *)(v4 + 16) = *qword_140C47318++ & 0xFFFFFFFFFFi64;
            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(int)v6;
            }
          }
          while( 1 )
          {
            LOBYTE(v13) = 0;
            if( VslGetSecurePageList(0, 0i64, 0i64, &v13) < 0 )
              break;
            LODWORD(xmmword_140C47320) = *(unsigned __int16 *)(*((_QWORD *)&xmmword_140C47320 + 1) + 8i64);
            qword_140C47318 = (_QWORD *)(*((_QWORD *)&xmmword_140C47320 + 1) + 16i64);
            if( (_DWORD)xmmword_140C47320 )
              goto LABEL_22;
          }
        }
        LODWORD(v6) = (unsigned int)HvlpEndSecurePageListIteration(1i64, 0);
        LOBYTE(xmmword_140C47300) = 0;
      }
      else
      {
        BYTE2(xmmword_140C47300) = 1;
      }
    }
    else
    {
      BYTE1(xmmword_140C47300) = v10;
    }
  }
  return(int)v6;
}

Referenced by:

HvlAddSecureHvPagesCallbackRoutine
HvlAddSecureSkPagesCallbackRoutine