HvFoldBackDirtyData
VOID __stdcall HvFoldBackDirtyData(_HHIVE *Hive){
unsigned __int64 v1;
__int64 HvBinHeadersUse;
_CMSI_RW_LOCK *p_WriterLock;
unsigned int v5;
v1 = 0i64;
if( *(_QWORD *)&Hive[1].HvUsedCellsUse )
{
HvBinHeadersUse = Hive[1].HvBinHeadersUse;
p_WriterLock = &Hive->WriterLock;
ExAcquirePushLockExclusiveEx((UINT64)&Hive->WriterLock, 0i64);
if( (_DWORD)HvBinHeadersUse )
{
v5 = 8;
do
{
if( _bittest64(*(const signed __int64 **)&Hive[1].HvUsedCellsUse, v1) == 1 )
HvpMarkDirty((INT64)Hive, v5, 1i64);
++v1;
v5 += 512;
--HvBinHeadersUse;
}
while( HvBinHeadersUse );
}
if( (_InterlockedExchangeAdd64((volatile signed __int64 *)p_WriterLock, 0xFFFFFFFFFFFFFFFFui64) & 6) == 2 )
ExfTryToWakePushLock((volatile INT64 *)p_WriterLock);
KeAbPostRelease(p_WriterLock);
}
HvFreeDirtyData((INT64)Hive);
}Referenced by:
CmpFlushHive