WmipUpdateModifyGuid
UINT64 __stdcall WmipUpdateModifyGuid(
tagDATASOURCE *DataSource,
WMIREGGUIDW *RegGuid,
WMIREGINFOW *WmiRegInfo,
UINT64 BufferSize,
tagInstanceSet **AddModInstanceSet){
unsigned int v8;
unsigned int v9;
_GUID *v10;
tagInstanceSet *ISInDSByGuid;
tagInstanceSet *v12;
tagInstanceSet *v13;
__int128 v15;
__int64 v16;
tagInstanceSet **v17;
NTSTATUS v18;
void *v19;
__int64 v20;
__int64 v21;
UINT64 ProviderId;
UINT64 ProviderIda;
__int128 v24;
__int128 v25;
__int128 v26;
__int128 v27;
__int128 v28;
PVOID v29[12];
v8 = BufferSize;
memset(v29, 0i64, sizeof(v29));
v9 = 0;
*AddModInstanceSet = 0i64;
ISInDSByGuid = WmipFindISInDSByGuid(DataSource, &RegGuid->Guid, v10);
if( ISInDSByGuid )
{
v12 = (tagInstanceSet *)WmipAllocEntry((__int64)&stru_140C00F40 + 4496);
v13 = v12;
if( v12 )
{
LODWORD(ProviderId) = DataSource[14];
if( WmipBuildInstanceSet(RegGuid, WmiRegInfo, v8, v12, ProviderId) >= 0
&& !WmipIsEqualInstanceSets(ISInDSByGuid, v13) )
{
v24 = *(_OWORD *)ISInDSByGuid;
v25 = *((_OWORD *)ISInDSByGuid + 1);
v26 = *((_OWORD *)ISInDSByGuid + 2);
v27 = *((_OWORD *)ISInDSByGuid + 3);
v28 = *((_OWORD *)ISInDSByGuid + 4);
v15 = *((_OWORD *)ISInDSByGuid + 5);
*((_QWORD *)ISInDSByGuid + 11) = 0i64;
v16 = *(_QWORD *)ISInDSByGuid;
*(_OWORD *)&v29[10] = v15;
if( *(tagInstanceSet **)(v16 + 8) != ISInDSByGuid )
goto LABEL_20;
v17 = (tagInstanceSet **)*((_QWORD *)ISInDSByGuid + 1);
if( *v17 != ISInDSByGuid )
goto LABEL_20;
*v17 = (tagInstanceSet *)v16;
*(_QWORD *)(v16 + 8) = v17;
LODWORD(ProviderIda) = DataSource[14];
v18 = WmipBuildInstanceSet(RegGuid, WmiRegInfo, v8, ISInDSByGuid, ProviderIda);
if( v18 < 0 )
{
v19 = (void *)*((_QWORD *)ISInDSByGuid + 11);
if( v19 )
ExFreePoolWithTag(v19, 0);
*(_OWORD *)ISInDSByGuid = v24;
*((_OWORD *)ISInDSByGuid + 1) = v25;
*((_OWORD *)ISInDSByGuid + 2) = v26;
*((_OWORD *)ISInDSByGuid + 3) = v27;
*((_OWORD *)ISInDSByGuid + 4) = v28;
*((_OWORD *)ISInDSByGuid + 5) = v15;
}
v20 = *((_QWORD *)ISInDSByGuid + 7) + 56i64;
v21 = *(_QWORD *)v20;
if( *(_QWORD *)(*(_QWORD *)v20 + 8i64) != v20 )
LABEL_20:
__fastfail(3u);
*(_QWORD *)ISInDSByGuid = v21;
*((_QWORD *)ISInDSByGuid + 1) = v20;
*(_QWORD *)(v21 + 8) = ISInDSByGuid;
*(_QWORD *)v20 = ISInDSByGuid;
if( v18 >= 0 )
{
if( v29[11] )
ExFreePoolWithTag(v29[11], 0);
*AddModInstanceSet = ISInDSByGuid;
v9 = 2;
}
}
}
WmipUnreferenceEntry((__int64)&stru_140C00F40 + 4496, (volatile signed __int64 *)ISInDSByGuid);
if( v13 )
WmipUnreferenceEntry((__int64)&stru_140C00F40 + 4496, (volatile signed __int64 *)v13);
}
else
{
return(unsigned int)WmipUpdateAddGuid(DataSource, RegGuid, WmiRegInfo, v8, AddModInstanceSet);
}
return v9;
}Referenced by:
WmipUpdateDataSource