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