MiImagePageOk
NTSTATUS __stdcall MiImagePageOk(VOID *FaultingAddress, _MMPFN *Pfn1){
UINT8 v2;
wchar_t *v3;
int v5;
__int64 v6;
_MMVAD *Address;
__int64 v8;
__int64 v9;
__int64 v10;
__int64 v11;
union {unsigned int LongFlags;_MMVAD_FLAGS VadFlags;_MM_PRIVATE_VAD_FLAGS PrivateVadFlags;_MM_GRAPHICS_VAD_FLAGS GraphicsVadFlags;_MM_SHARED_VAD_FLAGS SharedVadFlags;volatile unsigned int VolatileVadLong;} v13;
LOBYTE(v5) = MI_PFN_IS_PROTO((_UNICODE_STRING *)Pfn1, (_UNICODE_STRING *)Pfn1, v2, v3);
if( !v5 )
return 1;
v8 = *(_QWORD *)(v6 + 16);
if( (v8 & 0x400) == 0 || ((*(_QWORD *)(v6 + 40) >> 60) & 7) == 3 )
return 1;
v9 = *(_QWORD *)(v6 + 16);
if( *(&stru_140C4DB30 + 42) && (v8 & 0x10) == 0 )
v9 = ~*(&stru_140C4DB30 + 42) & v8;
v10 = v9 >> 16;
if( (*(_DWORD *)(*(_QWORD *)v10 + 56i64) & 0x20) == 0 )
return 1;
v11 = *(_QWORD *)(*(_QWORD *)(*(_QWORD *)v10 + 96i64) + 40i64);
if( !v11 || (v11 & 0xFFFFFFFFFFFFFFF8ui64) == 8 || (v11 & 3) == 2 )
return 1;
if( (unsigned __int64)FaultingAddress >= 0xFFFF800000000000ui64 )
{
if( (MiFlags & 0x10000) == 0 || (v8 & 0x40) == 0 )
return 1;
LABEL_17:
if( !Address )
return 0;
goto LABEL_18;
}
if( !Address )
{
Address = MiLocateAddress(FaultingAddress);
goto LABEL_17;
}
LABEL_18:
v13.LongFlags = (unsigned int)Address->Core.u;
return(v13.LongFlags & 0x70) == 32
&& ((v13.LongFlags & 0xF80) == 128
|| (Address->u2.LongFlags2 & 0x8000000) != 0 && (v11 & 4) == 0
|| (MiFlags & 0x400) != 0 && (*(_BYTE *)(v10 + 34) & 2) != 0);
}Referenced by:
MiSoftFaultMappedView
MiWaitForCollidedFaultComplete