WmipSendEnableRequest

UINT64 __stdcall WmipSendEnableRequest(tagGUIDENTRY *GuidEntry, UINT8 IsEvent){
  tagGUIDENTRY v4; 
  int v5; 
  unsigned int v6; 
  tagGUIDENTRY v7; 

  if( IsEvent )
  {
    v4 = GuidEntry[22];
    v5 = 2;
    GuidEntry[22] = v4 + 1;
  }
  else
  {
    v4 = GuidEntry[23];
    v5 = 4;
    GuidEntry[23] = v4 + 1;
  }
  if( v4 || (v5 & GuidEntry[4]) != 0 )
  {
    if( !IsEvent && (v5 & GuidEntry[4]) != 0 )
      WmipWaitForCollectionEnabled(GuidEntry);
    return 0;
  }
  else
  {
    WmipReferenceEntry((INT64)GuidEntry);
    GuidEntry[4] |= v5;
    do
    {
      v6 = WmipSendEnableDisableRequest(IsEvent != 0 ? 4 : 6, GuidEntry, IsEvent);
      if( IsEvent )
        v7 = GuidEntry[22];
      else
        v7 = GuidEntry[23];
      if( v7 )
        break;
      v6 = WmipSendEnableDisableRequest(IsEvent != 0 ? 5 : 7, GuidEntry, IsEvent);
    }
    while( IsEvent ? GuidEntry[22] : GuidEntry[23] );
    GuidEntry[4] &= ~v5;
    if( !IsEvent )
      WmipReleaseCollectionEnabled(GuidEntry);
    WmipUnreferenceEntry((__int64)&stru_140C00F40 + 4528, (volatile signed __int64 *)GuidEntry);
  }
  return v6;
}

Referenced by:

WmipEnableCollectOrEvent