WmipEnableCollectionForNewGuid
int __fastcall WmipEnableCollectionForNewGuid(_QWORD *a1, __int64 a2){
volatile signed __int64 *GEByGuid;
volatile signed __int64 *v5;
int v6;
__int64 v7;
__int64 v8;
IO_STATUS_BLOCK Iosb;
union _LARGE_INTEGER Buffer[6];
memset(Buffer, 0, sizeof(Buffer));
GEByGuid = WmipFindGEByGuid(a1, 0);
v5 = GEByGuid;
if( GEByGuid )
{
KeWaitForSingleObject(&WmipSMMutex, Executive, 0, 0, 0i64);
if( *((_DWORD *)v5 + 22) )
{
v6 = *(_DWORD *)(a2 + 16);
if( (v6 & 0x82000) == 0 )
{
*(_DWORD *)(a2 + 16) = v6 | 0x2000;
*((_DWORD *)v5 + 4) |= 2u;
KeReleaseMutex(&WmipSMMutex, 0);
v7 = *(_QWORD *)(a2 + 64);
Buffer[5].QuadPart = 0i64;
memset((char *)&Buffer[0].QuadPart + 4, 0, 20);
Buffer[0].LowPart = 48;
*(_OWORD *)&Buffer[3].LowPart = *(_OWORD *)a1;
WmipSendWmiIrp(4u, *(unsigned int *)(v7 + 56), &Buffer[3], 0x30ui64, Buffer, &Iosb);
KeWaitForSingleObject(&WmipSMMutex, Executive, 0, 0, 0i64);
if( *((_DWORD *)v5 + 22) )
*((_DWORD *)v5 + 4) &= ~2u;
else
WmipDoDisableRequest(v5, 1, 2);
}
}
if( *((_DWORD *)v5 + 23) && (*(_DWORD *)(a2 + 16) & 0x4004) == 4 )
{
*((_DWORD *)v5 + 4) |= 4u;
*(_DWORD *)(a2 + 16) |= 0x4000u;
KeReleaseMutex(&WmipSMMutex, 0);
v8 = *(_QWORD *)(a2 + 64);
Buffer[5].QuadPart = 0i64;
memset((char *)&Buffer[0].QuadPart + 4, 0, 20);
Buffer[0].LowPart = 48;
*(_OWORD *)&Buffer[3].LowPart = *(_OWORD *)a1;
WmipSendWmiIrp(6u, *(unsigned int *)(v8 + 56), &Buffer[3], 0x30ui64, Buffer, &Iosb);
KeWaitForSingleObject(&WmipSMMutex, Executive, 0, 0, 0i64);
if( *((_DWORD *)v5 + 23) )
{
*((_DWORD *)v5 + 4) &= ~4u;
WmipReleaseCollectionEnabled((__int64)v5);
}
else
{
WmipDoDisableRequest(v5, 0, 4);
}
}
WmipUnreferenceEntry((__int64)&WmipGEChunkInfo, v5);
LODWORD(GEByGuid) = KeReleaseMutex(&WmipSMMutex, 0);
}
return(int)GEByGuid;
}Referenced by:
WmipGenerateRegistrationNotification
WmipUpdateDataSource