MiReferenceInPageFile
_FILE_OBJECT *__stdcall MiReferenceInPageFile(_MMINPAGE_SUPPORT *ReadBlock, UINT64 SessionId){
_CONTROL_AREA *ControlArea;
unsigned int v3;
_FILE_OBJECT *v5;
_MDL *PrefetchMdl;
_MI_IMAGE_SECURITY_REFERENCE *SeImageStub;
_MMPFN *v9;
__int32 bf_0;
ControlArea = ReadBlock->ControlArea;
v3 = SessionId;
if( !ControlArea )
return 0i64;
v5 = MiReferenceControlAreaFile(ReadBlock->ControlArea);
if( (ControlArea->u.LongFlags & 0x20) != 0 )
{
_InterlockedIncrement64((volatile signed __int64 *)&ControlArea->LockedPages);
PrefetchMdl = ReadBlock->PrefetchMdl;
SeImageStub = ControlArea->u2.SeImageStub;
if( !PrefetchMdl )
PrefetchMdl = &ReadBlock->Mdl;
v9 = &MmGetPfnDb()[(__int64)PrefetchMdl[1].Next];
ReadBlock->u3.ImagePteOffset = MiComputeImagePteIndex(v9, v3);
if( SeImageStub->DynamicRelocations )
{
bf_0 = ReadBlock->u1.e1._bf_0;
ReadBlock->u1.e1._bf_0 = bf_0 | 0x10000;
if( (MiFlags & 0x40000) != 0
&& (!MiCanPageMove(v9)
|| (ControlArea->u2.WritableUserReferences & 0xC0000) != 0
&& (((unsigned __int8)MI_READ_PTE_LOCK_FREE((INT64)&v9->OriginalPte.u.Hard) >> 5) & 2) != 0) )
{
ReadBlock->u1.e1._bf_0 = bf_0 & 0xFFFEFFFF;
}
}
}
else
{
ReadBlock->ControlArea = 0i64;
}
return v5;
}Referenced by:
MiIssueHardFault
MiPfExecuteReadList