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