WmipFindISinGEbyName
tagInstanceSet *__stdcall WmipFindISinGEbyName(tagGUIDENTRY *GuidEntry, WCHAR *InstanceName, UINT64 *InstanceIndex){
unsigned __int64 v3;
tagGUIDENTRY *v7;
INT64 i;
int v9;
int v10;
WCHAR *v11;
unsigned int v12;
int v13;
unsigned int v14;
const WCHAR *v16;
unsigned __int64 v17;
wchar_t *v18;
unsigned int v19;
unsigned int v20;
unsigned int v21;
v3 = -1i64;
do
++v3;
while( InstanceName[v3] );
KeWaitForSingleObject((UINT64)&ExBootDevicesRemovedEvent + 3072, 0, 0, 0, 0i64);
v7 = GuidEntry + 14;
for( i = *((_QWORD *)GuidEntry + 7); ; i = *(_QWORD *)i )
{
if( (tagGUIDENTRY *)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 && !wcsncmp(InstanceName, v16, v17) )
{
v18 = &InstanceName[v17];
v19 = wtoi(v18);
v20 = v19;
v21 = **(_DWORD **)(i + 88);
if( v19 >= v21 && v19 < v21 + *(_DWORD *)(i + 72) && (v19 || WmipIsNumber(v18)) )
{
*(_DWORD *)InstanceIndex = 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 = InstanceName;
do
{
v9 = *(WCHAR *)((char *)v11 + *(_QWORD *)(*(_QWORD *)(i + 88) + 8i64 * v12) - (_QWORD)InstanceName);
v10 = *v11 - v9;
if( v10 )
break;
++v11;
}
while( v9 );
if( !v10 )
break;
if( ++v12 >= v14 )
goto LABEL_8;
}
*(_DWORD *)InstanceIndex = v12;
LABEL_17:
WmipReferenceEntry(i);
LABEL_15:
KeReleaseMutex((_KMUTANT *)((char *)&ExBootDevicesRemovedEvent + 3072), 0);
return(tagInstanceSet *)i;
}Referenced by:
WmipMangleInstanceName