HvpShrinkMap
VOID __stdcall HvpShrinkMap(_HHIVE *Hive, _HSTORAGE_TYPE Type, UINT64 OldLength, UINT64 NewLength){
__int64 v4;
unsigned int v5;
unsigned int v6;
_HHIVE *v7;
_HMAP_TABLE *SmallDir;
unsigned int v9;
_HMAP_ENTRY *CellMap;
int v11;
unsigned int v12;
unsigned int v13;
v4 = Type;
v5 = NewLength;
v6 = OldLength;
v7 = Hive;
if( (_DWORD)NewLength || (SmallDir = Hive->Storage[Type].SmallDir, SmallDir != (_HMAP_TABLE *)v7->Storage[Type].Map) )
{
v9 = (Type << 31) + NewLength;
while( v9 < ((_DWORD)v4 << 31) + v6 )
{
CellMap = HvpGetCellMap(v7, v9);
v9 = v11 + 4096;
*(_OWORD *)&CellMap->BlockOffset = 0i64;
*(_QWORD *)&CellMap->MemAlloc = 0i64;
}
v12 = ((v5 >> 12) + 511) >> 9;
v13 = ((v6 >> 12) + 511) >> 9;
if( v12 < v13 )
HvpFreeMap(v7, v7->Storage[v4].Map, v12, v13 - 1);
}
else
{
v7->Free(SmallDir, 12288u);
}
}Referenced by:
HvpAddBin