WmipCachePtrs
VOID __stdcall WmipCachePtrs(
_GUID *Ptr1,
tagInstanceSet *Ptr2,
UINT64 *PtrCount,
UINT64 *PtrMax,
const VOID **PtrArray){
unsigned int v5;
_QWORD *v10;
__int64 v11;
VOID **PoolWithTag;
int v13;
void *v14;
v5 = *(_DWORD *)PtrCount;
if( *(_DWORD *)PtrCount != *(_DWORD *)PtrMax )
{
v10 = *PtrArray;
LABEL_3:
v11 = 2i64 * v5;
v10[v11] = Ptr1;
v10[v11 + 1] = Ptr2;
*(_DWORD *)PtrCount = v5 + 1;
return;
}
PoolWithTag = ExAllocatePoolWithTag(1ui64, 16i64 * (unsigned int)(*(_DWORD *)PtrMax + 64), 1885957463i64);
v10 = PoolWithTag;
if( PoolWithTag )
{
v13 = *(_DWORD *)PtrMax;
v14 = (void *)*PtrArray;
memmove(PoolWithTag, *PtrArray, 16 * *(_DWORD *)PtrMax);
*(_DWORD *)PtrMax = v13 + 64;
if( v14 )
ExFreePoolWithTag(v14, 0);
v5 = *(_DWORD *)PtrCount;
*PtrArray = v10;
goto LABEL_3;
}
}Referenced by:
WmipGenerateRegistrationNotification
WmipUpdateDataSource