WmipDetermineInstanceBaseIndex

NTSTATUS __fastcall WmipDetermineInstanceBaseIndex(const _GUID *Guid, const WCHAR *BaseName, UINT64 InstanceCount){
  unsigned int v5; 
  tagGUIDENTRY *GEByGuid; 
  volatile signed __int64 *v7; 
  tagGUIDENTRY *v8; 
  tagGUIDENTRY *i; 
  int v10; 
  int v11; 
  const WCHAR *v12; 
  _DWORD *v13; 

  v5 = 0;
  KeWaitForSingleObject((UINT64)&ExBootDevicesRemovedEvent + 3072, 0, 0, 0, 0i64);
  GEByGuid = WmipFindGEByGuid((_GUID *)Guid, 0);
  v7 = (volatile signed __int64 *)GEByGuid;
  if( GEByGuid )
  {
    v8 = GEByGuid + 14;
    for( i = (tagGUIDENTRY *)*((_QWORD *)GEByGuid + 7); i != v8; i = *(tagGUIDENTRY **)i )
    {
      if( (i[4] & 1) != 0 )
      {
        v13 = (_DWORD *)*((_QWORD *)i + 11);
        v12 = BaseName;
        do
        {
          v10 = *(const WCHAR *)((char *)v12 + (char *)(v13 + 1) - (char *)BaseName);
          v11 = *v12 - v10;
          if( v11 )
            break;
          ++v12;
        }
        while( v10 );
        if( !v11 && v5 <= *v13 + i[18] )
          v5 = *v13 + i[18];
      }
    }
    WmipUnreferenceEntry((__int64)&stru_140C00F40 + 4528, v7);
  }
  KeReleaseMutex((_KMUTANT *)((char *)&ExBootDevicesRemovedEvent + 3072), 0);
  return v5;
}

Referenced by:

WmipBuildInstanceSet