Адрес может быть как впринципе невалиден (MmIsAddressValid вернет FALSE), так и иметь специфичные условия для чтения (например всё что относится к графической подсистеме - win32k/tsddd, доступ в контексте system процесса вызовет ребут без какого либо бсода). Собственно, как безопасно попытаться прочитать ядерную память ?
Нужно понизить IRQL до уровня подкачки и обратиться к адресу(fetch), прежде обернув вызов в SEH или используя какой либо иной метод для отлова исключения. Если адреса(страницы) нет в рабочем наборе, он будет туда загружен. Иначе управление вернёт обработчик исключения. Но конечно можно покопаться в низкоуровневых кернел структурах и добыть инфу про состояние страницы
somebodynew, А если выгружена; подкачивается память прямым обычно обращением. Тогда получается из за не обращения вы посчитали валид адрес на низком IRQL не валидным на высоком IRQL. Это не верное решение. Сех не на всех IRQL работает, поэтому если его понизить нельзя, то следует организовать интерфейс между потоком на низком IRQL. Иначе опять же придётся лезть в нт интерналс. Обычно выбирается простой пусть, копаться в структурах ядра не лучший метод.