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