HvpTruncateBins

CHAR __fastcall HvpTruncateBins(UINT64 P2){
  unsigned int *v2; 
  int i; 
  unsigned int v4; 
  int v5; 
  _BYTE *CellMap; 
  unsigned int v7; 
  __int64 FreeBin; 
  v2 = (unsigned int *)(P2 + 272);
  for( i = 0; i < 2; ++i )
  {
    v4 = *v2;
    if( *v2 )
    {
      v5 = i << 31;
      do
      {
        CellMap = (_BYTE *)HvpGetCellMap(P2, v5 + v4 - 4096);
        if( !CellMap )
          KeBugCheckEx(0x51u, 1ui64, P2, v7, 0x138Fui64);
        FreeBin = HvpMapEntryGetFreeBin(CellMap);
        if( !FreeBin )
          break;
        v4 = *(_DWORD *)(FreeBin + 20);
      }
      while( v4 );
    }
    if( i || v4 + 0x10000 <= *(_DWORD *)(P2 + 1784) && ExIsResourceAcquiredExclusiveLite((PERESOURCE)&CmpRegistryLock) )
      HvFreeHivePartial(P2, v4, (unsigned int)i);
    v2 += 158;
  }
  return 0;
}

Referenced by:

HvStoreModifiedData