HvlDebuggerSupportInitialize

VOID __stdcall HvlDebuggerSupportInitialize(_LOADER_PARAMETER_BLOCK *LoaderBlock){
  CHAR v1; 
  char *LoadOptions; 
  UINT8 *v4; 
  UINT8 *v5; 
  CHAR v6; 
  UINT8 *v7; 
  UINT8 *v8; 
  CHAR v9; 
  UINT8 *v10; 
  CHAR v11; 
  UINT8 *v12; 
  UINT8 *v13; 
  CHAR v14; 
  __int64 v15; 
  __int64 v16; 
  int v17; 
  int v18; 
  int v19; 
  __int64 v20; 
  UINT8 *v21; 
  NTSTATUS v22; 
  CHAR v23; 
  __int64 v24; 
  UINT8 *v25; 
  char v26; 
  CHAR v27; 
  __int64 v28; 
  int v29; 
  CHAR v30; 
  __int64 v31; 
  __int64 v32; 
  __int16 v33; 
  _STRING SourceString; 
  _UNICODE_STRING DestinationString; 
  _QWORD v36[32]; 

  DestinationString = 0i64;
  if( (HvlpRootFlags & 8) != 0 )
  {
    if( LoaderBlock )
    {
      LoadOptions = LoaderBlock->LoadOptions;
      if( LoadOptions )
      {
        strstr((UINT8 *)LoadOptions, (UINT8 *)"HYPERVISORDBGPORT=", v1);
        v5 = v4;
        strstr((UINT8 *)LoaderBlock->LoadOptions, (UINT8 *)"HYPERVISORDBGDEVICE=", v6);
        v8 = v7;
        strstr((UINT8 *)LoaderBlock->LoadOptions, (UINT8 *)"HYPERVISORDBGACPIPATH=", v9);
        if( v10 )
        {
          strstr(v10, (UINT8 *)"\\", v11);
          v13 = v12;
          if( v12 )
          {
            memset(v36, 0i64, 0xF8u);
            HIDWORD(v36[27]) = 1;
            if( v5 )
              WORD2(v36[25]) = 0x8000;
            else
              WORD2(v36[25]) = -32765;
            strstr(v13, (UINT8 *)" ", v14);
            if( v15 )
            {
              LOWORD(v15) = v15 - (_WORD)v13;
            }
            else
            {
              v15 = -1i64;
              do
                ++v15;
              while( v13[v15] );
            }
            *(_DWORD *)(&SourceString.MaximumLength + 1) = 0;
            SourceString.Buffer = (char *)v13;
            SourceString.Length = v15;
            SourceString.MaximumLength = v15;
            if( RtlAnsiStringToUnicodeString(&DestinationString, &SourceString, 1u) >= 0 )
            {
              v36[28] = DestinationString.Buffer;
              LODWORD(v36[29]) = DestinationString.Length;
              BYTE3(v36[2]) = 1;
              ((void(__fastcall *)(_QWORD, _QWORD *))off_140C00700[0])(0i64, v36);
              RtlFreeAnsiString(&DestinationString);
            }
          }
        }
        else if( v5 )
        {
          strstr(v5, (UINT8 *)"COM", v11);
          if( v16 )
          {
            v17 = atol((const CHAR *)(v16 + 3)) - 1;
            if( v17 )
            {
              v18 = v17 - 1;
              if( v18 )
              {
                v19 = v18 - 1;
                if( v19 )
                {
                  if( v19 == 1 )
                    *(&stru_140CF2E80 + 931) = 744i64;
                }
                else
                {
                  *(&stru_140CF2E80 + 931) = 1000i64;
                }
              }
              else
              {
                *(&stru_140CF2E80 + 931) = 760i64;
              }
            }
            else
            {
              *(&stru_140CF2E80 + 931) = 1016i64;
            }
          }
        }
        else if( v8 )
        {
          strstr(v8, (UINT8 *)"=", v11);
          v21 = (UINT8 *)v20;
          if( v20 )
          {
            v22 = atol((const CHAR *)(v20 + 1));
            strstr(v21, (UINT8 *)".", v23);
            if( v24 )
            {
              v25 = (UINT8 *)(v24 + 1);
              v26 = atol((const CHAR *)(v24 + 1));
              strstr(v25, (UINT8 *)".", v27);
              if( v28 )
              {
                v29 = v26 & 0x1F | (32 * (atol((const CHAR *)(v28 + 1)) & 7));
                strstr((UINT8 *)LoaderBlock->LoadOptions, (UINT8 *)"HYPERVISORDBGTYPE=", v30);
                v32 = v31;
                if( v31 )
                {
                  if( !strncmp((INT8 *)(v31 + 18), (INT8 *)"1394", 4ui64) )
                  {
                    v33 = -32767;
                  }
                  else
                  {
                    if( strncmp((INT8 *)(v32 + 18), (INT8 *)"NET", 3ui64) )
                      return;
                    v33 = -32765;
                  }
                  memset(v36, 0i64, 0xF8u);
                  LODWORD(v36[1]) = -1;
                  WORD2(v36[1]) = -1;
                  BYTE3(v36[2]) = 1;
                  v36[0] = __PAIR64__(v29, v22);
                  if( v33 == -32767 )
                  {
                    HIWORD(v36[1]) = 12;
                    LOBYTE(v36[2]) = 16;
                  }
                  else
                  {
                    HIWORD(v36[1]) = 2;
                    LOBYTE(v36[2]) = -1;
                  }
                  LODWORD(v36[24]) = 0;
                  ((void(__fastcall *)(_QWORD, _QWORD *))off_140C005F8[0])(0i64, v36);
                }
              }
            }
          }
        }
      }
    }
  }
}

Referenced by:

No references.