WmipDetermineInstanceBaseIndex

UINT64 __fastcall WmipDetermineInstanceBaseIndex(const _GUID *Guid, const WCHAR *BaseName, UINT64 InstanceCount){
  unsigned int v5; 
  volatile signed __int64 *GEByGuid; 
  volatile signed __int64 *v7; 
  __int64 *v8; 
  __int64 *i; 
  int v10; 
  int v11; 
  const WCHAR *v12; 
  _DWORD *v13; 
  v5 = 0;
  KeWaitForSingleObject(&WmipSMMutex, Executive, 0, 0, 0i64);
  GEByGuid = WmipFindGEByGuid(Guid, 0);
  v7 = GEByGuid;
  if( GEByGuid )
  {
    v8 = (__int64 *)(GEByGuid + 7);
    for( i = (__int64 *)*((_QWORD *)GEByGuid + 7); i != v8; i = (__int64 *)*i )
    {
      if( (i[2] & 1) != 0 )
      {
        v13 = (_DWORD *)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 + *((_DWORD *)i + 18) )
          v5 = *v13 + *((_DWORD *)i + 18);
      }
    }
    WmipUnreferenceEntry((__int64)&WmipGEChunkInfo, v7);
  }
  KeReleaseMutex(&WmipSMMutex, 0);
  return v5;
}

Referenced by:

WmipBuildInstanceSet