HvpIsFreeNeighbor
UINT8 __stdcall HvpIsFreeNeighbor(
ULONG_PTR Hive,
_HBIN *Bin,
_HCELL *FreeCell,
_HCELL **FreeNeighbor,
_HSTORAGE_TYPE Type){
_HCELL *v6;
__int64 Size;
_HCELL *v10;
_HSTORAGE_TYPE v11;
v6 = (_HCELL *)((char *)FreeCell + FreeCell->Size);
*FreeNeighbor = 0i64;
if( (int)v6 - (int)Bin < Bin->Size && v6->Size > 0 )
{
v11 = Type;
*FreeNeighbor = v6;
goto LABEL_11;
}
v6 = (_HCELL *)&Bin[1];
if( &Bin[1] >= (_HBIN *)FreeCell )
return 0;
while( 1 )
{
Size = v6->Size;
if( (int)Size > 0 )
break;
v6 = (_HCELL *)((char *)v6 - Size);
LABEL_6:
if( v6 >= FreeCell )
return 0;
}
v10 = (_HCELL *)((char *)v6 + Size);
if( v10 != FreeCell )
{
v6 = v10;
goto LABEL_6;
}
v11 = Type;
*FreeNeighbor = v6;
if( Type != 1
&& !HvpMarkCellDirty(
*(PVOID *)&Hive,
(PVOID)((unsigned int)v6 + Bin->FileOffset - (_DWORD)Bin),
1u,
CmHiveDirtyNormal) )
{
return 0;
}
LABEL_11:
HvpDelistFreeCell(Hive, (_DWORD)v6 + (v11 << 31) + Bin->FileOffset - (_DWORD)Bin, v11, (_HSTORAGE_TYPE)FreeNeighbor);
return 1;
}Referenced by:
HvFreeCell