WmipEnableCollectionForNewGuid

VOID __stdcall WmipEnableCollectionForNewGuid(_GUID *Guid, tagInstanceSet *InstanceSet){
  tagGUIDENTRY *GEByGuid; 
  tagInstanceSet v5; 
  __int64 v6; 
  __int64 v7; 
  _IO_STATUS_BLOCK Iosb; 
  _LARGE_INTEGER Timeout[6]; 

  memset(Timeout, 0, sizeof(Timeout));
  GEByGuid = WmipFindGEByGuid(Guid, 0);
  if( GEByGuid )
  {
    KeWaitForSingleObject((UINT64)&ExBootDevicesRemovedEvent + 3072, 0, 0, 0, 0i64);
    if( GEByGuid[22] )
    {
      v5 = InstanceSet[4];
      if( (v5 & 0x82000) == 0 )
      {
        InstanceSet[4] = v5 | 0x2000;
        GEByGuid[4] |= 2u;
        KeReleaseMutex((_KMUTANT *)((char *)&ExBootDevicesRemovedEvent + 3072), 0);
        v6 = *((_QWORD *)InstanceSet + 8);
        Timeout[5].QuadPart = 0i64;
        memset((char *)&Timeout[0].QuadPart + 4, 0, 20);
        Timeout[0].anonymous_0.LowPart = 48;
        *(_GUID *)&Timeout[3].anonymous_0.LowPart = *Guid;
        WmipSendWmiIrp(4u, *(unsigned int *)(v6 + 56), &Timeout[3], 0x30ui64, Timeout, &Iosb);
        KeWaitForSingleObject((UINT64)&ExBootDevicesRemovedEvent + 3072, 0, 0, 0, 0i64);
        if( GEByGuid[22] )
          GEByGuid[4] &= ~2u;
        else
          WmipDoDisableRequest(GEByGuid, 1u, 2ui64);
      }
    }
    if( GEByGuid[23] && (InstanceSet[4] & 0x4004) == 4 )
    {
      GEByGuid[4] |= 4u;
      InstanceSet[4] |= 0x4000u;
      KeReleaseMutex((_KMUTANT *)((char *)&ExBootDevicesRemovedEvent + 3072), 0);
      v7 = *((_QWORD *)InstanceSet + 8);
      Timeout[5].QuadPart = 0i64;
      memset((char *)&Timeout[0].QuadPart + 4, 0, 20);
      Timeout[0].anonymous_0.LowPart = 48;
      *(_GUID *)&Timeout[3].anonymous_0.LowPart = *Guid;
      WmipSendWmiIrp(6u, *(unsigned int *)(v7 + 56), &Timeout[3], 0x30ui64, Timeout, &Iosb);
      KeWaitForSingleObject((UINT64)&ExBootDevicesRemovedEvent + 3072, 0, 0, 0, 0i64);
      if( GEByGuid[23] )
      {
        GEByGuid[4] &= ~4u;
        WmipReleaseCollectionEnabled(GEByGuid);
      }
      else
      {
        WmipDoDisableRequest(GEByGuid, 0, 4ui64);
      }
    }
    WmipUnreferenceEntry((__int64)&stru_140C00F40 + 4528, (volatile signed __int64 *)GEByGuid);
    KeReleaseMutex((_KMUTANT *)((char *)&ExBootDevicesRemovedEvent + 3072), 0);
  }
}

Referenced by:

WmipGenerateRegistrationNotification
WmipUpdateDataSource