Как правильно обращаться к регистру памяти? - PullRequest
0 голосов
/ 06 ноября 2018

Я новичок в разработке драйверов устройств, но вскоре после запуска у меня возникли проблемы.

Я делаю Драйвер Intel High Definition Audio Controller , и я проверил в спецификации, что доступ к регистру отображения памяти будет необходим.

Я нашел их адреса, используя devmgmt.msc и RWEverything , они начинаются с 0xF7FF8000.

Когда я писал DriverEntry, я непосредственно обращался к этому базовому адресу (например, (unsigned char*)0xf7ff8000) и использовал индекс и смещение для доступа к конкретному регистру, но когда я запустил драйвер, в точке I произошло BSOD читать значение из одного из них в регистре (это был CorbSize регистр по смещению 0x4e)

Код остановки BSOD был 0x00000050, "PAGE_FAULT_IN_NONPAGED_AREA". И kd показал мне, что f7ff8000 освобожден (или поврежден) пул, и есть неправильный размер выделения @f7ff8000, слишком большой ...

Эти коды ошибок означают, что адрес 0xF7FF8000 является недоступным пространством данных? Но я проверил содержимое на 0xF7FF8000, используя RWEverything , и в этом пространстве постоянно менялись значения, хотя команда db 0xf7ff8000 на kd показала мне только заполненное пространство памяти ...

Мне действительно интересно, в чем проблема, и каков правильный способ доступа к их отображенным в память регистрам.

Извините за плохое владение английским: '(

Спасибо!

...