CcFetchDataForRead
UINT8 __stdcall CcFetchDataForRead(
_FILE_OBJECT *FileObject,
_LARGE_INTEGER *FileOffset,
UINT64 TotalLength,
UINT8 Wait,
UINT64 *FaultedData,
_VACB *Vacb,
UINT64 PagePriority,
PVOID DiskIoAttribution){
unsigned __int64 v9;
UINT64 v11;
VOID *v12;
unsigned int v13;
UINT64 v14;
VOID *v15;
v9 = FileOffset->QuadPart & 0xFFFFFFFFFFFFF000ui64;
v11 = (((unsigned int)TotalLength + FileOffset->QuadPart + 4095) & 0xFFFFFFFFFFFFF000ui64) - v9;
v12 = (VOID *)(*(_QWORD *)Vacb + (FileOffset->LowPart & 0x3F000));
v13 = 0x40000 - ((unsigned int)v12 & 0x3FFFF);
if( v13 >= (unsigned int)v11 )
v13 = ((TotalLength + FileOffset->LowPart + 4095) & 0xFFFFF000) - v9;
v14 = v13;
if( !(unsigned int)MmHardFaultBytesRequired(FileObject, (LARGE_INTEGER)v9, v13) )
goto LABEL_4;
if( Wait )
{
MmPrefetchForCacheManager(FileObject, (_LARGE_INTEGER)v9, v15, v11);
*(_DWORD *)FaultedData = 1;
LABEL_4:
MmCheckCachedPageStates(v12, v14, 0i64, 0i64);
return 1;
}
return 0;
}Referenced by:
CcMapAndCopyFromCache
CcMdlRead