CcShouldLazyWriteCacheMap
BOOL __fastcall CcShouldLazyWriteCacheMap(INT64 a1, INT64 a2, INT64 a3, INT64 a4){
int v6;
int v8;
unsigned int v9;
__int64 v10;
UINT8 *Partition;
bool v12;
v6 = *(_DWORD *)(a1 + 152);
if( (v6 & 0x400820) != 0 )
goto LABEL_12;
if( (v6 & 0x10000) != 0 )
goto LABEL_18;
if( !*(_DWORD *)(a1 + 516) )
{
v8 = *(_DWORD *)(a1 + 4);
if( !v8 && (!*(_DWORD *)(a1 + 112) || !*(_QWORD *)(a1 + 8)) || (v6 & 0x40000000) != 0 )
goto LABEL_18;
v9 = *(_DWORD *)(a1 + 112);
if( !v9 || !a2 )
goto LABEL_12;
LODWORD(a2) = *(_DWORD *)(a1 + 268) + 1;
*(_DWORD *)(a1 + 268) = a2;
if( (v6 & 0x1000000) != 0 )
{
v10 = *(_QWORD *)(a1 + 240);
if( !*(_DWORD *)(v10 + 104) )
{
a2 = *(_QWORD *)(v10 + 136) + 0x9896800ui64 / KeMaximumIncrement;
if( (__int64)KUSER_SHARED_DATA.TickCountQuad <= a2 && *(_DWORD *)(a1 + 112) < 0x40u )
goto LABEL_12;
}
goto LABEL_18;
}
if( (v6 & 0x200) != 0 )
{
if( (a2 & 0xF) == 0 || v9 >= 0x40 )
goto LABEL_18;
v12 = (_DWORD)a4 == 16;
}
else
{
if( (*(_DWORD *)(a3 + 80) & 0x8000) == 0 || !v8 )
goto LABEL_18;
Partition = (UINT8 *)CcGetPartition((_QWORD *)a1);
LODWORD(a2) = CcCanIWriteStreamEx(Partition, a3, 0x1000000ui64, 0i64, 8, 0i64);
v12 = (_BYTE)a2 == 0;
}
if( v12 )
{
LABEL_18:
LOBYTE(a2) = 1;
return a2;
}
}
LABEL_12:
LOBYTE(a2) = 0;
return a2;
}Referenced by:
CcLazyWriteScan