ApiSetResolveToHost
INT64 __fastcall ApiSetResolveToHost(_DWORD *a1, UINT16 *a2, INT64 a3, CHAR *a4, INT64 HostBinary){
CHAR v6;
__int64 v9;
WCHAR *v10;
unsigned __int64 v11;
INT64 result;
unsigned int v13;
_WORD *v14;
UINT16 v15;
CHAR *v16;
char *v17;
v6 = 0;
*(_OWORD *)HostBinary = 0i64;
v9 = *a2;
if( (unsigned int)v9 >= 8 )
{
v10 = (WCHAR *)*((_QWORD *)a2 + 1);
v11 = *(_QWORD *)v10 & 0xFFFFFFDFFFDFFFDFui64;
if( v11 == 0x2D004900500041i64 || v11 == 0x2D005400580045i64 )
{
v13 = v9;
v14 = (WCHAR *)((char *)v10 + v9);
do
{
if( v13 <= 1 )
break;
v13 -= 2;
--v14;
}
while( *v14 != 45 );
v15 = (unsigned __int16)v13 >> 1;
if( v15 )
{
v16 = ApiSetpSearchForApiSet(a1, v10, v15);
if( v16 )
{
if( a3 && *((_DWORD *)v16 + 5) > 1u )
{
v17 = (char *)ApiSetpSearchForApiSetHost(
(INT64)v16,
*(const WCHAR **)(a3 + 8),
*(_WORD *)a3 >> 1,
(INT64)a1);
goto LABEL_14;
}
if( *((_DWORD *)v16 + 5) )
{
v17 = (char *)a1 + *((unsigned int *)v16 + 4);
LABEL_14:
v6 = 1;
*(_QWORD *)(HostBinary + 8) = (char *)a1 + *((unsigned int *)v17 + 3);
*(_WORD *)(HostBinary + 2) = *((_WORD *)v17 + 8);
*(_WORD *)HostBinary = *((_WORD *)v17 + 8);
}
}
}
}
}
result = 0i64;
*a4 = v6;
return result;
}Referenced by:
ExIsMultiSessionSku
MiResolveImageReferences