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