MiCheckForDiscardableLongJumpTable
NTSTATUS __fastcall MiCheckForDiscardableLongJumpTable(_KLDR_DATA_TABLE_ENTRY *DataTableEntry, INT64 a2){
UINT64 v4;
unsigned __int64 v5;
unsigned __int64 v6;
__int64 v7;
_MMPTE *EndPte;
__int64 v10;
v10 = 0i64;
EndPte = 0i64;
v4 = 0i64;
while( 1 )
{
LODWORD(v4) = MiSnapDriverRange(DataTableEntry, v4, 2ui64, 0i64, &EndPte);
LODWORD(v5) = (_DWORD)EndPte;
if( EndPte )
{
v6 = *(_QWORD *)(a2 + 176);
v7 = (_QWORD)MmGetPteBase() << 25;
v5 = (((_QWORD)EndPte << 25) - v7) >> 16;
if( v6 >= v5 )
{
v5 = (((v10 << 25) - v7) | 0xFFF0000) >> 16;
if( v6 <= v5 )
break;
}
}
if( !(_DWORD)v4 )
return v5;
}
DataTableEntry->Flags |= 0x800u;
return v5;
}Referenced by:
MiProcessKernelCfgImageLoadConfig