HvlDebuggerSupportInitialize

VOID __stdcall HvlDebuggerSupportInitialize(_LOADER_PARAMETER_BLOCK *LoaderBlock){
  CHAR *v2; 
  CHAR *v3; 
  CHAR *v4; 
  CHAR *v5; 
  CHAR *v6; 
  __int64 v7; 
  CHAR *v8; 
  int v9; 
  int v10; 
  int v11; 
  CHAR *v12; 
  CHAR *v13; 
  int v14; 
  CHAR *v15; 
  CHAR *v16; 
  char v17; 
  CHAR *v18; 
  int v19; 
  CHAR *v20; 
  const INT8 *v21; 
  CHAR *v22; 
  const INT8 *v23; 
  __int16 v24; 
  struct _STRING SourceString; 
  struct _UNICODE_STRING DestinationString; 
  _DWORD result[3]; 
  __int16 v28; 
  __int16 v29; 
  char v30; 
  char v31; 
  int v32; 
  __int16 v33; 
  int v34; 
  wchar_t *Buffer; 
  int Length; 
  DestinationString = 0i64;
  if( (HvlpRootFlags & 8) != 0 )
  {
    if( LoaderBlock )
    {
      v2 = (CHAR *)*((_QWORD *)LoaderBlock + 27);
      if( v2 )
      {
        v3 = strstr(v2, "HYPERVISORDBGPORT=");
        v4 = strstr(*((CHAR **)LoaderBlock + 27), "HYPERVISORDBGDEVICE=");
        v5 = strstr(*((CHAR **)LoaderBlock + 27), "HYPERVISORDBGACPIPATH=");
        if( v5 )
        {
          v6 = strstr(v5, "\\");
          if( v6 )
          {
            memset((INT64)result, 0i64);
            v34 = 1;
            if( v3 )
              v33 = 0x8000;
            else
              v33 = -32765;
            v7 = (__int64)strstr(v6, " ");
            if( v7 )
            {
              LOWORD(v7) = v7 - (_WORD)v6;
            }
            else
            {
              v7 = -1i64;
              do
                ++v7;
              while( v6[v7] );
            }
            *(_DWORD *)(&SourceString.MaximumLength + 1) = 0;
            SourceString.Buffer = v6;
            SourceString.Length = v7;
            SourceString.MaximumLength = v7;
            if( RtlAnsiStringToUnicodeString(&DestinationString, &SourceString, 1u) >= 0 )
            {
              Buffer = DestinationString.Buffer;
              Length = DestinationString.Length;
              v31 = 1;
              ((void(__fastcall *)(_QWORD, _DWORD *))off_140C00700[0])(0i64, result);
              RtlFreeAnsiString(&DestinationString);
            }
          }
        }
        else if( v3 )
        {
          v8 = strstr(v3, "COM");
          if( v8 )
          {
            v9 = atol(v8 + 3) - 1;
            if( v9 )
            {
              v10 = v9 - 1;
              if( v10 )
              {
                v11 = v10 - 1;
                if( v11 )
                {
                  if( v11 == 1 )
                    KdHvComPortInUse = 744i64;
                }
                else
                {
                  KdHvComPortInUse = 1000i64;
                }
              }
              else
              {
                KdHvComPortInUse = 760i64;
              }
            }
            else
            {
              KdHvComPortInUse = 1016i64;
            }
          }
        }
        else if( v4 )
        {
          v12 = strstr(v4, "=");
          v13 = v12;
          if( v12 )
          {
            v14 = atol(v12 + 1);
            v15 = strstr(v13, ".");
            if( v15 )
            {
              v16 = v15 + 1;
              v17 = atol(v15 + 1);
              v18 = strstr(v16, ".");
              if( v18 )
              {
                v19 = v17 & 0x1F | (32 * (atol(v18 + 1) & 7));
                v20 = strstr(*((CHAR **)LoaderBlock + 27), "HYPERVISORDBGTYPE=");
                v22 = v20;
                if( v20 )
                {
                  if( !(unsigned int)strncmp(v20 + 18, (size_t)"1394", 4ui64, v21, *(va_list *)&SourceString.Length) )
                  {
                    v24 = -32767;
                  }
                  else
                  {
                    if( (unsigned int)strncmp(v22 + 18, (size_t)"NET", 3ui64, v23, *(va_list *)&SourceString.Length) )
                      return;
                    v24 = -32765;
                  }
                  memset((INT64)result, 0i64);
                  result[2] = -1;
                  v28 = -1;
                  v31 = 1;
                  result[0] = v14;
                  result[1] = v19;
                  if( v24 == -32767 )
                  {
                    v29 = 12;
                    v30 = 16;
                  }
                  else
                  {
                    v29 = 2;
                    v30 = -1;
                  }
                  v32 = 0;
                  ((void(__fastcall *)(_QWORD, _DWORD *))off_140C005F8[0])(0i64, result);
                }
              }
            }
          }
        }
      }
    }
  }
}

Referenced by:

Phase1InitializationDiscard