WmipSendGuidUpdateNotifications

VOID __stdcall WmipSendGuidUpdateNotifications(UINT64 NotificationType, UINT64 GuidCount, PTRCACHE *GuidList){
  __int64 v3; 
  int v5; 
  int v6; 
  size_t v7; 
  VOID **PoolWithTag; 
  VOID **v9; 
  __int64 v10; 
  _WORD *v11; 
  __int16 v12; 
  _WORD *v13; 
  __int64 v14; 
  _OWORD *v15; 
  __int64 v16; 
  _OWORD *v17; 

  v3 = (unsigned int)GuidCount;
  v5 = NotificationType;
  v6 = 16 * GuidCount + 8;
  v7 = 16 * GuidCount + 110;
  PoolWithTag = ExAllocatePoolWithTag(1ui64, v7, 1885957463i64);
  v9 = PoolWithTag;
  if( PoolWithTag )
  {
    memset(PoolWithTag, 0i64, v7);
    *(_OWORD *)v9 = 0i64;
    *((_OWORD *)v9 + 1) = 0i64;
    *((_OWORD *)v9 + 2) = 0i64;
    *((_DWORD *)v9 + 6) = -1265808991;
    v10 = 14i64;
    *((_DWORD *)v9 + 7) = 298903415;
    *((_DWORD *)v9 + 8) = -1610609499;
    *((_DWORD *)v9 + 9) = 271124169;
    *(_DWORD *)v9 = v7;
    *((_DWORD *)v9 + 11) = 10;
    *((_DWORD *)v9 + 12) = 64;
    *((_DWORD *)v9 + 14) = 96;
    *((_DWORD *)v9 + 15) = v6;
    *((_WORD *)v9 + 32) = 28;
    v11 = (_WORD *)v9 + 33;
    do
    {
      if( v10 == -2147483632 )
        break;
      v12 = *(_WORD *)((char *)v11 + (char *)L"REGUPDATEINFO" - ((char *)v9 + 66));
      if( !v12 )
        break;
      *v11++ = v12;
      --v10;
    }
    while( v10 );
    v13 = v11 - 1;
    if( v10 )
      v13 = v11;
    *v13 = 0;
    v14 = *((unsigned int *)v9 + 14);
    v15 = (_OWORD *)((char *)v9 + v14 + 8);
    *(_DWORD *)((char *)v9 + v14) = v5;
    *(_DWORD *)((char *)v9 + v14 + 4) = v3;
    if( (_DWORD)v3 )
    {
      v16 = v3;
      do
      {
        v17 = *(_OWORD **)GuidList;
        GuidList += 4;
        *v15++ = *v17;
        --v16;
      }
      while( v16 );
    }
    WmipProcessEvent((_WNODE_HEADER *)v9, 1u, 0);
    ExFreePoolWithTag(v9, 0);
  }
}

Referenced by:

WmipGenerateRegistrationNotification
WmipUpdateDataSource