WmipDisableCollectionForRemovedGuid

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

  memset(Timeout, 0, sizeof(Timeout));
  GEByGuid = WmipFindGEByGuid((_GUID *)Guid, 0);
  if( GEByGuid )
  {
    KeWaitForSingleObject((UINT64)&ExBootDevicesRemovedEvent + 3072, 0, 0, 0, 0i64);
    if( GEByGuid[22] && (InstanceSet[4] & 0x82000) == 0x2000 )
    {
      InstanceSet[4] &= ~0x2000u;
      GEByGuid[4] |= 2u;
      KeReleaseMutex((_KMUTANT *)((char *)&ExBootDevicesRemovedEvent + 3072), 0);
      v5 = *((_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(5u, *(unsigned int *)(v5 + 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] & 0x4000) != 0 )
    {
      GEByGuid[4] |= 4u;
      InstanceSet[4] &= ~0x4000u;
      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(7u, *(unsigned int *)(v6 + 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