MiReferenceInPageFile
_FILE_OBJECT *__fastcall MiReferenceInPageFile(__int64 a1, unsigned int a2){
__int64 v2;
_FILE_OBJECT *v5;
__int64 v7;
__int64 v8;
char *v9;
int v10;
v2 = *(_QWORD *)(a1 + 208);
if( !v2 )
return 0i64;
v5 = MiReferenceControlAreaFile(*(_CONTROL_AREA **)(a1 + 208));
if( (*(_DWORD *)(v2 + 56) & 0x20) != 0 )
{
_InterlockedIncrement64((volatile signed __int64 *)(v2 + 112));
v7 = *(_QWORD *)(a1 + 256);
v8 = *(_QWORD *)(v2 + 96);
if( !v7 )
v7 = a1 + 272;
v9 = (char *)MmGetPfnDb() + 48 * *(_QWORD *)(v7 + 48);
*(_DWORD *)(a1 + 188) = MiComputeImagePteIndex((INT64)v9, a2);
if( *(_QWORD *)(v8 + 32) )
{
v10 = *(_DWORD *)(a1 + 192);
*(_DWORD *)(a1 + 192) = v10 | 0x10000;
if( (MiFlags & 0x40000) != 0
&& (!MiCanPageMove((INT64)v9)
|| (*(_DWORD *)(v2 + 92) & 0xC0000) != 0
&& (((unsigned __int8)MI_READ_PTE_LOCK_FREE((INT64)(v9 + 16)) >> 5) & 2) != 0) )
{
*(_DWORD *)(a1 + 192) = v10 & 0xFFFEFFFF;
}
}
}
else
{
*(_QWORD *)(a1 + 208) = 0i64;
}
return v5;
}Referenced by:
MiIssueHardFault
MiPfExecuteReadList