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