CcReleaseByteRangeFromWrite
VOID __stdcall CcReleaseByteRangeFromWrite(
_SHARED_CACHE_MAP *SharedCacheMap,
_LARGE_INTEGER *FileOffset,
UINT64 Length,
_BCB *FirstBcb,
UINT8 VerifyRequired){
__int64 v5;
_BCB *v6;
unsigned int v7;
__int64 v10;
_LARGE_INTEGER v11;
unsigned int v12;
_LARGE_INTEGER FileOffseta;
v5 = 0i64;
v6 = FirstBcb;
v7 = Length;
if( FirstBcb )
{
if( *(_WORD *)FirstBcb != 765 )
KeBugCheckEx(0x34u, (PVOID)0x14B4, (PVOID)0xFFFFFFFFC0000420i64, 0i64, 0i64);
do
{
v10 = *((_QWORD *)v6 + 2);
if( *(_WORD *)v6 == 765 )
{
v5 = *((_QWORD *)v6 + 1);
if( (*((_DWORD *)SharedCacheMap + 38) & 0x200) != 0 )
CcUnpinFileDataEx(v6, (*((_DWORD *)SharedCacheMap + 38) & 2) != 0, SET_CLEAN);
if( VerifyRequired )
CcSetDirtyPinnedData(v6, 0i64);
CcUnpinFileDataEx(v6, 1u, UNPIN);
}
v6 = (_BCB *)(v10 - 16);
}
while( FileOffset->QuadPart != v5 );
}
else if( VerifyRequired )
{
v11 = *FileOffset;
FileOffseta = *FileOffset;
if( (_DWORD)Length )
{
do
{
if( (v11.QuadPart & 0xFFFFFFFFFE000000ui64) < ((v11.QuadPart + v7 - 1i64) & 0xFFFFFFFFFE000000ui64) )
v12 = ((v11.anonymous_0.LowPart + 0x1FFFFFF) & 0xFE000000) - v11.anonymous_0.LowPart;
else
v12 = v7;
if( v12 > 0x2000000 )
KeBugCheckEx(0x34u, (PVOID)0x14A1, (PVOID)0xFFFFFFFFC0000420i64, 0i64, 0i64);
CcSetDirtyInMask(SharedCacheMap, &FileOffseta, v12, 0i64);
v11.QuadPart += v12;
FileOffseta = v11;
v7 -= v12;
}
while( v7 );
}
}
}Referenced by:
CcFlushCachePriv
CcNotifyOfMappedWriteComplete