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