CmpRemoveFromSecurityCache

void __fastcall CmpRemoveFromSecurityCache(__int64 a1, unsigned int a2){
  unsigned int v3; 
  __int64 v4; 
  __int64 v5; 
  __int64 v6; 
  _QWORD *v7; 
  unsigned int v8; 
  v8 = 0;
  if( CmpFindSecurityCellCacheIndex(a1, a2, &v8) )
  {
    v3 = v8;
    v4 = 16i64 * v8;
    v5 = *(_QWORD *)(*(_QWORD *)(a1 + 1880) + v4 + 8);
    v6 = *(_QWORD *)(v5 + 8);
    if( *(_QWORD *)(v6 + 8) != v5 + 8 || (v7 = *(_QWORD **)(v5 + 16), *v7 != v5 + 8) )
      __fastfail(3u);
    *v7 = v6;
    *(_QWORD *)(v6 + 8) = v7;
    (*(void(__fastcall **)(__int64, _QWORD))(a1 + 32))(v5, (unsigned int)(*(_DWORD *)(v5 + 24) + 32));
    memmove(
      (UINT8 *)(v4 + *(_QWORD *)(a1 + 1880)),
      (UINT8 *)(*(_QWORD *)(a1 + 1880) + 16i64 * (v3 + 1)),
      16i64 * (*(_DWORD *)(a1 + 1864) - v3 - 1));
    --*(_DWORD *)(a1 + 1864);
  }
}

Referenced by:

CmpRemoveSecurityCellList