Как исправить ошибку «Unable to locate valid DTB»
Что такое Directory Table Base и зачем его ищет ридер. Как исправить ошибку DTB по порядку: карта памяти, виртуализация, стабильность USB, холодный старт и чистая Windows в конце.
Коротко
Ошибка DTB значит, что ридер прочитал память через вашу карту, но не нашла Directory Table Base ядра Windows. Действуйте по порядку: сгенерируйте карту памяти, отключите VT-d/VT-x или SVM/IOMMU в BIOS игрового ПК, убедитесь в стабильности USB, затем сделайте холодный старт обеих машин.
На странице11
- Что такое Directory Table Base?
- Зачем ридеру нужен DTB?
- Значит ли ошибка DTB, что карта сломана?
- Как понять, какая причина у вас
- Как исправить ошибку DTB: пошагово
- Какие настройки BIOS менять и на каком ПК
- Параметры командной строки, которые стоят за вашим лаунчером
- Почему ручной ввод DTB — не решение
- Почему переустановка Windows — в самом конце
- Частые вопросы об ошибке DTB
- Источники
Что такое Directory Table Base?
Каждый процесс на машине с Windows видит собственное изолированное виртуальное адресное пространство. Чтобы перевести виртуальный адрес в физический адрес в оперативной памяти, нужна иерархия таблиц страниц, корень которой — один физический адрес на процесс. На x86-64 процессор держит этот адрес в регистре CR3, а Windows хранит его для каждого процесса в поле DirectoryTableBase, которое все сокращают до DTB.
Зачем ридеру нужен DTB?
Ваша карта читает по PCIe физическую память, а не виртуальную, поэтому видит оперативку как плоский массив байтов и понятия не имеет, какому процессу что принадлежит. После подключения первая задача ридера — просканировать этот массив в поисках структуры, похожей на таблицы страниц ядра. Из этой структуры он восстанавливает DTB и дальше переводит адреса так же, как это делал бы процессор. Пока этот шаг не пройден, ничего выше него запуститься не может. Поэтому сбой DTB останавливает всё и выглядит как ошибка инициализации, а не как ошибка конкретной игры.
Справка
Значит ли ошибка DTB, что карта сломана?
Нет, она значит, что не удался поиск. Само сообщение доказывает, что USB работал, PCIe работал и байты вернулись. Дальше сканирование прочитало не те байты, неполные байты или байты, которые переставили ещё до того, как они дошли до карты. У каждой из этих ситуаций свои причины, и их можно отличить друг от друга.
Как понять, какая причина у вас
Определите причину до того, как начнёте что-то менять: отличить одну причину от другой позволяет именно колонка с проверкой.
| Что вы видите | Самая вероятная причина | Проверка, которая это подтверждает |
|---|---|---|
| Падает каждый раз и сразу, на машине, где ни разу не работало | Нет карты памяти, и ридер лезет в диапазоны, которые трогать нельзя | Сгенерируйте карту памяти и передайте её программе. Если ошибка ушла, дело было в этом |
| Падает каждый раз, а игровой ПК на платформе AMD или связь идёт через Thunderbolt | На этих платформах чтение недопустимых физических адресов убивает тракт чтения, и сканирование так и не завершается | Карта памяти здесь фактически обязательна. Проверяйте с картой памяти, прежде чем проверять что-либо ещё |
| Падает каждый раз на машине, где осталась включённой виртуализация | VT-d/VT-x на Intel или SVM/IOMMU на AMD переотображают или ограничивают то, что видит карта | Отключите их в BIOS игрового ПК, сделайте холодный старт и повторите с той же картой памяти |
| То работает, то падает, и никакой закономерности не видно | Нестабильная USB-связь: из-за неполного чтения сканирование ничего не находит | Дважды прогоните тест скорости чтения. Сильно разные цифры или низкая цифра — вот и ответ |
| Начало падать в день прошивки и с тех пор ни разу не заработало | Сам образ прошивки | Всё остальное с этой страницы проверено и в порядке. Обращайтесь к поставщику прошивки с точным текстом ошибки |
| Вчера работало, сегодня падает, а вы ничего не меняли | Обновление Windows на одной из машин или карта, оставшаяся в зависшем состоянии | Сначала сделайте полный холодный старт обеих машин, затем перепроверьте версию драйвера на втором ПК |
На первой сборке часто бывают сразу две причины: нет карты памяти и не отключена виртуализация. Исправьте обе, прежде чем делать вывод, что ни одно из изменений не помогло.
Как исправить ошибку DTB: пошагово
Шаги начинаются с самого дешёвого и самого вероятного решения. Сделайте один шаг и повторите попытку, прежде чем идти дальше: если поменять четыре вещи сразу, вы так и не узнаете, какая из них сработала.
- Сгенерируйте карту памяти на этой машине, с этой прошивкой, и укажите её программе. Это самое действенное решение, и большинству первых сборок больше ничего не нужно
- Зайдите в BIOS ИГРОВОГО ПК и отключите виртуализацию: VT-d и VT-x на Intel, SVM Mode и IOMMU на AMD. Сохраните настройки, выйдите и дайте системе один раз загрузиться до рабочего стола
- Убедитесь в стабильности USB-связи: кабель с передачей данных, порт данных карты и задний порт USB 3 на втором ПК, без хаба и дока. Скорость чтения должна оставаться стабильной в двух прогонах подряд
- Сделайте полный холодный старт обеих машин: выключите их полностью, затем подождите десять секунд с вынутым из розетки кабелем питания или выключенным тумблером на блоке питания. Сначала включите игровой ПК, а второй ПК — после него
- Заново генерируйте карту памяти после любого изменения железа: новой оперативки, переставленного модуля DIMM, другого слота для карты или обновления BIOS. Устаревшая карта памяти описывает раскладку, которой больше нет
- Только если все шаги выше проверены и в порядке, а ошибка не изменилась, ставьте на игровой ПК чистую Windows. Это крайняя мера и никогда не первый шаг
Какие настройки BIOS менять и на каком ПК
Нужные настройки находятся в BIOS ИГРОВОГО ПК, а не второго. На платформах Intel они называются VT-x и VT-d, иногда в разделе Intel Virtualization Technology, а на AMD — SVM Mode и IOMMU. На некоторых платах в том же разделе лежат связанные пункты вроде переключателя DMA protection или Kernel DMA Protection (защита ядра от DMA). Меняйте их по одному и записывайте, что поменяли: однажды вы захотите вернуть эту машину в обычное состояние. Если не можете найти настройку, ищите её точное название в мануале платы, а не бродите по меню наугад.
Параметры командной строки, которые стоят за вашим лаунчером
Большинство продуктов прячут эти параметры за лаунчером, и если их знать, становится понятно, что на самом деле делает галочка в вашем софте. Все эти команды — операции проверки и настройки.
REM Probe which physical memory ranges are readable, to build a map from
pcileech.exe probe -device fpga
REM Let the tool derive the memory map itself
MemProcFS.exe -device fpga -memmap auto
REM Or pass a map file you generated on this machine
MemProcFS.exe -device fpga -memmap mmap.txt
REM Verbose output, so the failing line is visible instead of guessed at
MemProcFS.exe -device fpga -memmap mmap.txt -v -printf
REM Diagnostic only: supply a known DTB by hand. The value changes every boot
MemProcFS.exe -device fpga -memmap mmap.txt -dtb 0x1ad000Внимание
Почему ручной ввод DTB — не решение
Если введённое вручную значение DTB убирает ошибку, вы узнали кое-что полезное: проблема была в сканировании, а не в тракте чтения. Но это всё равно не решение: Windows выбирает это значение при загрузке, и оно станет другим при следующем перезапуске любой из машин. Поэтому сборка, которая на него полагается, ломается каждый день. Используйте ручной ввод, чтобы подтвердить гипотезу, а потом исправьте карту памяти или настройку BIOS, из-за которой сканирование не удалось.
Внимание
Почему переустановка Windows — в самом конце
Чистая установка идёт последней, потому что занимает часы, меняет много переменных сразу и не устраняет ни одной из частых причин. После неё отсутствующая карта памяти всё так же отсутствует, настройка BIOS всё так же выставлена, а нестабильный кабель всё так же нестабилен. Переустанавливайте систему, только если текст ошибки так и не изменился после того, как вы проверили карту памяти, BIOS, USB-тракт и сделали правильный холодный старт.
Частые вопросы об ошибке DTB
Число после ошибки что-то значит?
Да: оно показывает, какая из попыток инструмента провалилась, и тем самым сужает круг причин. Всегда указывайте его, когда сообщаете об ошибке, и копируйте текстом, а не скриншотом.
Можно скопировать карту памяти у человека с такой же материнской платой?
Нет. Карта памяти описывает раскладку физической памяти одной машины в один момент времени, включая то, как в ней установлены модули оперативки. Чужая карта памяти в лучшем случае бесполезна, а в худшем именно из-за неё у вас и не проходит чтение.
Виртуализацию на втором ПК тоже нужно отключать?
Нет. Настройка важна на той машине, чью память читают, поэтому второй ПК не трогайте, если только документация вашего софта не говорит иного.
Ошибка DTB — признак обнаружения?
Нет. Это сбой инициализации ридера на вашем втором ПК, и та же ошибка появляется на машине, где игра вообще не установлена.
Всё работает, пока я не перезагружу игровой ПК, а потом снова падает. Почему?
Такая картина указывает на устаревшую карту памяти или на введённый вручную DTB, оставшийся с прошлой загрузки. Заново сгенерируйте карту памяти и перестаньте передавать фиксированный DTB.
Источники
Порядок решений — результат работы на стенде: именно в такой последовательности команда разбирает тикеты с DTB, начиная с самого дешёвого шага.
- 01MemProcFS (Ulf Frisk)
инструмент, который выводит ошибку DTB и принимает флаги memmap и dtb, показанные на этой странице
github.com
- 02PCILeech (Ulf Frisk)
инструмент для чтения памяти, которому принадлежит команда probe с этой страницы
github.com
- 03LeechCore (Ulf Frisk)
библиотека, названиям флагов которой следуют команды на этой странице
github.com
- 04RAMMap (Sysinternals)
как распределены диапазоны физической памяти на одной машине с Windows — именно это и описывает карта памяти
learn.microsoft.com
Читать дальше
Не получилось? Откройте тикет в Discord
Все гайды