WmipUpdateModifyGuid
INT64 __fastcall WmipUpdateModifyGuid(INT64 a1, GUID *Guid, WMIREGINFOW *WmiRegInfo, UINT64 BufferSize, INT64 a5){
unsigned int v8;
unsigned int v9;
_QWORD *ISInDSByGuid;
__int64 v11;
volatile signed __int64 *v12;
__int128 v14;
__int64 v15;
_QWORD *v16;
int v17;
void *v18;
__int64 v19;
__int64 v20;
__int128 v21;
__int128 v22;
__int128 v23;
__int128 v24;
__int128 v25;
__int64 v26;
PVOID P[2];
v8 = BufferSize;
memset((INT64)&v26, 0i64);
v9 = 0;
*(_QWORD *)a5 = 0i64;
ISInDSByGuid = WmipFindISInDSByGuid(a1, Guid);
if( ISInDSByGuid )
{
v11 = WmipAllocEntry((INT64)&WmipISChunkInfo);
v12 = (volatile signed __int64 *)v11;
if( v11
&& (int)WmipBuildInstanceSet((__int64)Guid, (__int64)WmiRegInfo, v8, v11, *(_DWORD *)(a1 + 56)) >= 0
&& !WmipIsEqualInstanceSets((__int64)ISInDSByGuid, (__int64)v12) )
{
v21 = *(_OWORD *)ISInDSByGuid;
v22 = *((_OWORD *)ISInDSByGuid + 1);
v23 = *((_OWORD *)ISInDSByGuid + 2);
v24 = *((_OWORD *)ISInDSByGuid + 3);
v25 = *((_OWORD *)ISInDSByGuid + 4);
v14 = *((_OWORD *)ISInDSByGuid + 5);
ISInDSByGuid[11] = 0i64;
v15 = *ISInDSByGuid;
*(_OWORD *)P = v14;
if( *(_QWORD **)(v15 + 8) != ISInDSByGuid )
goto LABEL_20;
v16 = (_QWORD *)ISInDSByGuid[1];
if( (_QWORD *)*v16 != ISInDSByGuid )
goto LABEL_20;
*v16 = v15;
*(_QWORD *)(v15 + 8) = v16;
v17 = WmipBuildInstanceSet((__int64)Guid, (__int64)WmiRegInfo, v8, (__int64)ISInDSByGuid, *(_DWORD *)(a1 + 56));
if( v17 < 0 )
{
v18 = (void *)ISInDSByGuid[11];
if( v18 )
ExFreePoolWithTag(v18, 0);
*(_OWORD *)ISInDSByGuid = v21;
*((_OWORD *)ISInDSByGuid + 1) = v22;
*((_OWORD *)ISInDSByGuid + 2) = v23;
*((_OWORD *)ISInDSByGuid + 3) = v24;
*((_OWORD *)ISInDSByGuid + 4) = v25;
*((_OWORD *)ISInDSByGuid + 5) = v14;
}
v19 = ISInDSByGuid[7] + 56i64;
v20 = *(_QWORD *)v19;
if( *(_QWORD *)(*(_QWORD *)v19 + 8i64) != v19 )
LABEL_20:
__fastfail(3u);
*ISInDSByGuid = v20;
ISInDSByGuid[1] = v19;
*(_QWORD *)(v20 + 8) = ISInDSByGuid;
*(_QWORD *)v19 = ISInDSByGuid;
if( v17 >= 0 )
{
if( P[1] )
ExFreePoolWithTag(P[1], 0);
*(_QWORD *)a5 = ISInDSByGuid;
v9 = 2;
}
}
WmipUnreferenceEntry((__int64)&WmipISChunkInfo, ISInDSByGuid);
if( v12 )
WmipUnreferenceEntry((__int64)&WmipISChunkInfo, v12);
}
else
{
return(unsigned int)WmipUpdateAddGuid(a1, Guid, WmiRegInfo, v8, a5);
}
return v9;
}Referenced by:
WmipUpdateDataSource