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