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.