WmipFindISinGEbyName
ULONG_PTR __fastcall WmipFindISinGEbyName(__int64 a1, const wchar_t *a2, unsigned int *a3){
unsigned __int64 v3;
__int64 v7;
UINT64 i;
int v9;
int v10;
const wchar_t *v11;
unsigned int v12;
int v13;
unsigned int v14;
const WCHAR *v16;
size_t v17;
wchar_t *v18;
unsigned int v19;
unsigned int v20;
unsigned int v21;
v3 = -1i64;
do
++v3;
while( a2[v3] );
KeWaitForSingleObject(&WmipSMMutex, Executive, 0, 0, 0i64);
v7 = a1 + 56;
for( i = *(_QWORD *)(a1 + 56); ; i = *(_QWORD *)i )
{
if( i == v7 )
{
i = 0i64;
goto LABEL_15;
}
v13 = *(_DWORD *)(i + 16);
if( (v13 & 1) == 0 )
break;
v16 = (const WCHAR *)(*(_QWORD *)(i + 88) + 4i64);
v17 = -1i64;
do
++v17;
while( v16[v17] );
if( v17 < v3 && !(unsigned int)wcsncmp(a2, v16, v17) )
{
v18 = (wchar_t *)&a2[v17];
v19 = wtoi(v18);
v20 = v19;
v21 = **(_DWORD **)(i + 88);
if( v19 >= v21 && v19 < v21 + *(_DWORD *)(i + 72) && (v19 || WmipIsNumber(v18)) )
{
*a3 = v20 - v21;
goto LABEL_17;
}
}
LABEL_8:
;
}
if( (v13 & 2) == 0 )
goto LABEL_8;
v14 = *(_DWORD *)(i + 72);
v12 = 0;
if( !v14 )
goto LABEL_8;
while( 1 )
{
v11 = a2;
do
{
v9 = *(const wchar_t *)((char *)v11 + *(_QWORD *)(*(_QWORD *)(i + 88) + 8i64 * v12) - (_QWORD)a2);
v10 = *v11 - v9;
if( v10 )
break;
++v11;
}
while( v9 );
if( !v10 )
break;
if( ++v12 >= v14 )
goto LABEL_8;
}
*a3 = v12;
LABEL_17:
WmipReferenceEntry(i);
LABEL_15:
KeReleaseMutex(&WmipSMMutex, 0);
return i;
}Referenced by:
WmipMangleInstanceName